有关calloc的问题

来源:百度知道 编辑:UC知道 时间:2024/05/27 04:55:55
比如说
int *p,i;
p=calloc(10,sizeof(int));
for(i=0;i<10;i++)
p[i]=2*i;

calloc返回的应该是10*sizeof(int)这段内存的地址是吧。那p就是这段内存空间的首地址吧??既然p是一个地址值,那为什么还可以p[i]=2*i这样赋值呢??p也不是整型数组啊。。。

定义数组 int a[10]; 那么a就是一个固定地址,不能改,只能改变a[i]里的值.
而int *p. p=calloc(10,sizeof(int)); 不仅可以改变p的值,也可以改变
p[i]的值. 你所说的 p[i]=2*i;那是因为 p 是一个int类型的指针,那么电脑就会把p指向的地址看成int大小一块块空间,因此可以这么写.

你应该深入阅读一些C语言指针与数组方面的教材,

在C中,数组和指针在某种意义上说是等价的,数组和指针都可以通过下标来访问

例如,在声明函数a()时,

int a(int *b);

int a(int b[]);
是等价的