#include <stdio.h>
#include <stdlib.h>
int main()
{
int *p, n, i;
printf("Enter the size of the array:");
scanf("%d", &n);
p = (int *)malloc(n * sizeof(int));
for (i = 0; i < n; i++)
{
printf("\n Enter element %d:", i + 1);
scanf("%d", &p[i]);
}
for (i = 0; i < n; i++)
printf("\n %d", p[i]);
return 0;
}
为什么我们需要写&
在scanf中,如果它是一个数组,那就没有必要了?
p
是一个指向所有内存空间的指针,所以 &p[i]
应该给出指针的地址,但不是我们想要存储数据的位置,对吧?
另外,如果我们写 *p[i]
在printf
,它给出一个错误,p
是一个指针,所以我们应该尊重它并将数据存储在内存中的保留空间中,但它不起作用?即使我按原样编译上述程序,它也会在接受 3 个值作为输入后停止工作。
最佳答案
下标运算符 [] 也执行取消引用。它同时执行索引和取消引用。 p[n]
相当于 *(p+n)
,即它转到一个偏移量并取消引用它。因此,&p[n]
相当于 p+n
。
关于C 内存分配(malloc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27444664/