结构中指针变量的大小

use*_*934 1 c pointers structure sizeof

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;
}
Run Code Online (Sandbox Code Playgroud)

我希望结构中指针的大小为"*name_pointer"....

chu*_*ica 7

要获得指针大小的使用

printf("%d\n", (int) sizeof(record.name_pointer));
Run Code Online (Sandbox Code Playgroud)

你可能得到2,4,6,8等


要获得指针所指向的数据大小(a char),请使用

printf("%d\n", (int) sizeof(*record.name_pointer));
Run Code Online (Sandbox Code Playgroud)

你应该得到1.


要获取指针指向的字符串的字符串长度,假设record.name_pointer指向合法数据,请使用

printf("%d\n", (int) strlen(record.name_pointer));
Run Code Online (Sandbox Code Playgroud)

BTW正如@alk所说,为什么(int)上面的转换,使用的合适的转换说明符sizeof()包括'z'前缀.结果sizeof()strlen()类型size_t.虽然size_t并且int通常是相同的,但是有许多系统具有不同的尺寸.由于sizeof()是"无符号整数类型"(C11 6.5.3.4),我建议

printf("%zu\n", sizeof(...
Run Code Online (Sandbox Code Playgroud)

  • @ManojAwasthi:`name_pointer`被定义为`char*`,因此它指向一个**字符.一切都很好. (4认同)