我是新来的,只是尝试它的一些功能。我遇到了
calloc()
函数。
我想知道为什么打印的整个变量与每个索引不同。变量值不应该是0
吗?
#include "stdio.h"
#include "stdlib.h"
int main()
{
int *array;
array = calloc(100,sizeof(int));
printf("%d\n",array);
for(int i = 0 ; i<sizeof(array);i++)
{
printf("%d\n", array[i]);
}
free(array);
}
输出是
-1300734400
0
0
0
0
0
0
0
0
我预计
printf("%d\n",array);
中打印的值将为零
当你这样做时:
printf("%d\n",array);
由于
array
具有类型 int *
,因此您尝试打印指针的值,而不是它指向的内容。此外, %d
格式说明符用于打印 int
值,而不是 int *
值。您应该使用 %p
来打印指针。
printf("%d\n",array);
这是错误的,您打印的是数组的地址,而不是内容。如果您打算实际打印地址,则应该使用 %p
并将指针强制转换为 (void*)
。i<sizeof(array)
这是错误的,sizeof
给出了以字节为单位的大小,但array[i]
假设int
项目编号i
,而不是字节。要获取数组的项目数,您必须执行 sizeof(array)/sizeof(*array)
。#include "stdio.h"
当包含标准库头文件时,您应该使用 <stdio.h>
。 " "
语法用于用户定义的标头。