为什么当我打印每个元素并打印整个值时,在c中使用calloc函数后我会得到奇怪的值?

问题描述 投票:0回答:2

我是新来的,只是尝试它的一些功能。我遇到了

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);
中打印的值将为零

c calloc
2个回答
0
投票

当你这样做时:

printf("%d\n",array);

由于

array
具有类型
int *
,因此您尝试打印指针的值,而不是它指向的内容。此外,
%d
格式说明符用于打印
int
值,而不是
int *
值。您应该使用
%p
来打印指针。


0
投票
  • printf("%d\n",array);
    这是错误的,您打印的是数组的地址,而不是内容。如果您打算实际打印地址,则应该使用
    %p
    并将指针强制转换为
    (void*)
  • i<sizeof(array)
    这是错误的,
    sizeof
    给出了以字节为单位的大小,但
    array[i]
    假设
    int
    项目编号
    i
    ,而不是字节。要获取数组的项目数,您必须执行
    sizeof(array)/sizeof(*array)
  • #include "stdio.h"
    当包含标准库头文件时,您应该使用
    <stdio.h>
    " "
    语法用于用户定义的标头。
© www.soinside.com 2019 - 2024. All rights reserved.