关于 "sizeof" C 字符指针数组的问题
Question on "sizeof" char pointer array in C
我有两个字符数组如下:
char *t1[10];
char(*t2)[10];
当使用 sizeof 找到它们的大小时
printf("sizeof(t1): %d\n", sizeof(t1));
printf("sizeof(t2): %d\n", sizeof(t2));
我发现输出是:
sizeof(t1): 80
sizeof(t2): 8
我很困惑为什么我在使用 sizeof 运算符时会得到两个不同的结果。
对于初学者,在输出 size_t
类型的值时,您必须使用转换说明符 zu
而不是 d
printf("sizeof(t1): %zu\n", sizeof(t1));
printf("sizeof(t2): %zu\n", sizeof(t2));
这条记录
char(*t2)[10];
没有声明数组。它是指向数组类型 char[10]
.
的指针的声明
因此 sizeof( t1 )
产生数组的大小,而 sizeof( t2 )
产生指针的大小。
考虑示例声明
char t1[5][10];
char ( *t2 )[10] = t1;
指针t2
由数组t1
的第一个元素(类型char[10]
)的地址初始化。即它指向数组的第一个元素t1
.
还要考虑下面对printf
的调用
printf("sizeof( *t2 ): %zu\n", sizeof( *t2 ));
调用的输出将是 10
。
这就是取消引用指针,您将获得 char[10]
.
类型的一维数组
如果你想获得相同的输出,那么第二个声明应该重写为
char *t1[10];
char *( t2)[10];
我有两个字符数组如下:
char *t1[10];
char(*t2)[10];
当使用 sizeof 找到它们的大小时
printf("sizeof(t1): %d\n", sizeof(t1));
printf("sizeof(t2): %d\n", sizeof(t2));
我发现输出是:
sizeof(t1): 80
sizeof(t2): 8
我很困惑为什么我在使用 sizeof 运算符时会得到两个不同的结果。
对于初学者,在输出 size_t
zu
而不是 d
printf("sizeof(t1): %zu\n", sizeof(t1));
printf("sizeof(t2): %zu\n", sizeof(t2));
这条记录
char(*t2)[10];
没有声明数组。它是指向数组类型 char[10]
.
因此 sizeof( t1 )
产生数组的大小,而 sizeof( t2 )
产生指针的大小。
考虑示例声明
char t1[5][10];
char ( *t2 )[10] = t1;
指针t2
由数组t1
的第一个元素(类型char[10]
)的地址初始化。即它指向数组的第一个元素t1
.
还要考虑下面对printf
printf("sizeof( *t2 ): %zu\n", sizeof( *t2 ));
调用的输出将是 10
。
这就是取消引用指针,您将获得 char[10]
.
如果你想获得相同的输出,那么第二个声明应该重写为
char *t1[10];
char *( t2)[10];