结构中指针变量的大小

时间:2013-08-01 11:56:11

标签: 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;
}

我想在结构中使用指针变量“* name_pointer”的大小....

4 个答案:

答案 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_tint通常是相同的,但是有许多系统具有不同的大小。由于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);