int main()
{
struct
{
char *name_pointer;
char all[13];
int foo;
} record;
printf("%d\n",sizeof(record.all));
printf("%d\n",sizeof(record.foo));
printf("%d\n",sizeof(record));
return 0;
}
我想在结构中使用指针变量“* name_pointer”的大小....
答案 0 :(得分:7)
要获取指针的大小,请使用
printf("%d\n", (int) sizeof(record.name_pointer));
你可能得到2,4,6,8等
要获取指针所指向的数据大小(char
),请使用
printf("%d\n", (int) sizeof(*record.name_pointer));
你应该得到1。
要获取指针指向的字符串的字符串长度,假设record.name_pointer
指向合法数据,请使用
printf("%d\n", (int) strlen(record.name_pointer));
BTW正如@alk所说的以及上面(int)
投射的原因,与sizeof()
一起使用的合适转换说明符包含'z'前缀。 sizeof()
和strlen()
的结果属于size_t
类型。虽然size_t
和int
通常是相同的,但是有许多系统具有不同的大小。由于sizeof()是“无符号整数类型”(C11 6.5.3.4),我建议
printf("%zu\n", sizeof(...
答案 1 :(得分:0)
指针变量将始终(32位系统架构)的大小为4。 如果你有64位系统架构,它就是8。
答案 2 :(得分:0)
我认为在sizeof中使用数据类型而不是本机数据类型的变量是个好主意。所以使用:
sizeof(char *)
答案 3 :(得分:-1)
使用以下代码:
printf("%d\n", (int) sizeof(record->name_pointer)/4);