大众信息网

C语言有关calloc函数的问题

关注:165  答案:3  手机版
解决时间 2021-01-10 21:00
int b[10];
int *a=(int*)calloc(10,sizeof(int));
b[8]=a[1];
定义的a是一个指向int类型的指针不错吧?
那么为什么第二行会合法?
最佳答案
a 是 int*,所以 a[1] == *(a + 1) 是一个 int;
b[8] 自然是一个 int;
所以 a[1] 和 b[8] 都是 int 型的变量,b[8] = a[1] 是合法的。
全部回答
calloc是定义10个长度为sizeof(int)的动态空间,相当于一个有10个元素的数组;自动初始化为每个元素为0;此时a就为数组名了,输出b[8]为0;;输出a的十个数均为0;
calloc函数的功能与malloc函数的功能相似,都是从堆分配内存。   函数名: calloc   函数原型:void *calloc(int n,int size);   功 能: 函数返回值为void型指针。如果执行成功,函数从堆上获得size x n的字节空间,并返回该空间的首地址。如果执行失败,函数返回null。该函数与malloc函数的一个显著不同时是,calloc函数得到的内存空间是经过初始化的,其内容全为0。calloc函数适合为数组申请空间,可以将size设置为数组元素的空间长度,将n设置为数组的容量。   示例代码: #include  #include  #define size 5 int main() { int * p=null; int i=0; //为p从堆上分配size个int型空间 p=(int *)calloc(size,sizeof(int));     if(null==p){ printf("error in calloc.\n"); return -1; } //为p指向的size个int型空间赋值 for(i=0;i
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!