首先,我希望用户输入所需数组的大小。所以我使用:
int size;
scanf("&d",&size);
现在我想使用指针和malloc函数创建一个整数数组。我是这样做的:
int *p1 = (int*)malloc(sizeof(int)*size);
根据我的理解,这就像使用:
int p1[size];
但是我如何像数组一样使用它呢?
1:现在我想让用户输入和他写进这个"数组"一样多的整数。但是我不能使用p[0],因为它不是数组,它是指针。
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
- 问题1:1d数组和指向正确分配内存的指针几乎是一样的。
- 问题2:当你将一个数组传递给一个方法时,你实际上是在传递该数组的第一个元素的地址
数组实际上是指向数组第一个元素的指针
您可以使用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
很抱歉打扰大家,但是Miss 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*/