结构中指针变量的大小

问题描述 投票:1回答:4
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”的大小。...

c pointers structure sizeof
4个回答
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_tint通常相同,但是在许多系统中,它们的大小不同。并且由于sizeof()是“无符号整数类型”(C11 6.5.3.4),所以我建议

printf("%zu\n", sizeof(...

0
投票

指针变量将始终(32位系统体系结构)具有大小4。如果您具有64位系统架构,则为8。


0
投票

我相信使用sizeof的数据类型而不是本机数据类型的变量是一个好主意。因此使用:

sizeof(char *)

0
投票

使用以下代码:

printf("%d\n", (int) sizeof(record->name_pointer)/4);
© www.soinside.com 2019 - 2024. All rights reserved.