gpt4 book ai didi

c - 二维数组的 sizeof 操作

转载 作者:太空宇宙 更新时间:2023-11-04 00:36:01 32 4
gpt4 key购买 nike

如果我将二维数组定义为:

char *tablechar[][2] = {
{"0", "Innova"},
{"2", "Brio" },
{"3", "Alto" },
{"4", "Bolero"},
{"5", "Swift" }
};

和代码在同一个文件中:

printf("Value = %d\n",sizeof(tablechar));
printf("Value = %d\n",sizeof(tablechar[0]));
printf("Num of rows = %d\n",sizeof(tablechar)/sizeof(tablechar[0]));

输出符合预期:

Value = 40
Value = 8
Num of rows = 5

现在,我将这个 2D 矩阵传递给一个函数,该函数的定义是:

void printstuff(char *tab[][2])
{
printf("Value = %d\n",sizeof(tab));
printf("Value = %d\n",sizeof(tab[0]));
printf("Num of rows = %d\n",sizeof(tab)/sizeof(tab[0]));
}

我得到以下输出:

Value = 4
Value = 8
Num of rows = 0

在上面的函数中有一个编译器警告:

compiler_warning

为什么sizeof(tab)和sizeof(tablechar)的值不一样?

最佳答案

tablechar 是一个实际的数组,但参数 tab 将被视为指向具有指定类型的数组元素的指针,因此 sizeof(tab) 将是指针的大小,而 sizeof(tablechar) 将是数组的大小。

顺便说一句,将错误类型的数据传递给 printf() 会调用未定义的行为。您必须使用 %zu 而不是 %d 来打印 size_tsizeof 运算符将对其求值.

关于c - 二维数组的 sizeof 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35859954/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com