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

vyu0f0g1  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(78)

我是新来的,只是尝试它的一些功能。我遇到了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);中打印的值为零

ss2ws0br

ss2ws0br1#

  • printf("%d\n",array);这是错误的,你正在打印数组的地址,而不是内容。如果你想实际打印地址,你应该使用%p,并将指针转换为(void*)
  • i<sizeof(array)这是错误的。
  • 对于一个普通的数组,sizeof以字节为单位给出大小,但是array[i]假设int的项目数为i,而不是一个字节。要获得数组的项目数,必须执行sizeof(array)/sizeof(*array)
    • 然而 * 这里实际上没有数组,而是指向第一个元素的指针。所以你根本不能使用sizeof,否则你会得到指针的大小!通常是2到8字节,具体取决于系统。
  • #include "stdio.h"当包含标准库头文件时,应该使用<stdio.h>" "语法用于用户定义的头文件。
s3fp2yjn

s3fp2yjn2#

当你这样做时:

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

字符串
由于array的类型为int *,因此您试图打印指针的值,而不是它所指向的值。此外,%d说明符用于打印int值,而不是int *值。您应该使用%p来打印指针。

相关问题