1
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”的大小......

4

4 回答 4

7

要获取指针的大小,请使用

printf("%d\n", (int) sizeof(record.name_pointer));

您可能会得到 2、4、6、8 等。


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

printf("%d\n", (int) sizeof(*record.name_pointer));

你应该得到 1。


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

printf("%d\n", (int) strlen(record.name_pointer));

顺便说一句,正如@alk 所说以及为什么(int)上面的强制转换,一个合适的转换说明符sizeof()包括“z”前缀。sizeof()和的结果strlen()是类型size_t。虽然size_tint通常是相同的,但有许多系统具有不同的大小。而且由于 sizeof() 是“无符号整数类型”(C11 6.5.3.4),我建议

printf("%zu\n", sizeof(...
于 2013-08-01T12:06:54.683 回答
0

我相信在 sizeof 中使用数据类型而不是原生数据类型的变量是一个好主意。所以使用:

sizeof(char *)
于 2013-08-01T12:09:15.817 回答
0

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

于 2013-08-01T12:02:01.750 回答
-1

使用以下代码:

printf("%d\n", (int) sizeof(record->name_pointer)/4);
于 2020-02-15T13:36:46.923 回答