1

首先,我希望用户输入所需数组的大小。所以我正在使用:

int size;
scanf("&d",&size);

现在我想使用指针和 malloc 函数创建一个整数数组。这就是我所做的:

int *p1 = (int*)malloc(sizeof(int)*size);

据我了解,这就像使用:

int p1[size];

但是我如何像数组一样使用它呢?

问题1:现在我希望用户输入与他写入这个“数组”一样多的整数。但我不能使用 p[0] 因为它不是一个数组,它是一个指针。

问题2:我想将此数组“发送”到一个获取整数数组的函数。再说一次,这不是一个数组,我怎么能把它“给”给函数呢?

4

4 回答 4

2

回答第一个问题:

for(i = 0; i < size; i++ )
{
   scanf("%d",&p[i]); 
   /*p[i] is the content of element at index i and &p[i] is the address of element 
at index i */
}

或者

for(i = 0; i < size; i++ )
{
   scanf("%d",(p+i)); //here p+i is the address of element at index i
}

回答第二个问题:

要将此数组发送到函数,只需像这样调用函数:

function(p); //this is sending the address of first index of p

void function( int *p ) //prototype of the function
于 2013-04-16T11:43:06.297 回答
0
  • 问题 1:一维数组和指向正确分配内存的指针几乎是一回事。
  • 问题 2:将数组传递给方法时,实际上是在传递该数组的第一个元素的地址

数组实际上是指向数组第一个元素的指针

于 2013-04-16T11:36:09.133 回答
0

您可以使用subscript- 语法来访问指针的元素。

p1[3] = 5; // assign 5 to the 4th element

但是,这个语法实际上被转换成以下

*(p1+3) = 5; // pointer-syntax

对于第二个问题,定义一个函数并传递一个指针

int* getarray(int* p1, size_t arraysize){ } //define the function

int* values = getarray(p1, size); // use the function
于 2013-04-16T11:38:09.137 回答
0

很抱歉打扰大家,但 Upasana 小姐是对的,这是使用动态数组的正确方法。通过 malloc 声明您的数组后,您可以直接将其完全用作数组,如下所示:

       for(int i = 0; i < size; i++ )
    {
       scanf("%d",p+i); 
       /*p+i denoting address of memory allocated by malloc */
    }

第二个答案:现在只需将此地址传递给任何函数使用地址即可找到如下值:

function(int *p)
/* access as &p for first value &p+2 for second p+4 for third and so on*/
于 2016-04-28T04:59:27.987 回答