sizeof char **指针是否依赖于机器的体系结构?

时间:2012-04-10 18:12:02

标签: c pointers sizeof

当我执行以下代码时:

int main()
{
    char **temp;
    printf("Size of **temp %d", sizeof(**temp));
    printf("Size of *temp %d", sizeof(*temp));
    printf("Size of temp %d", sizeof(temp));
    return 0;
}

我明白了:

Size of **temp 1
Size of *temp 8
Size of temp 8

我不明白的是char指针的大小是8?机器无关吗?

7 个答案:

答案 0 :(得分:7)

  

sizeof char **指针是否依赖于机器的体系结构

不仅取决于机器,它依赖于编译器。您始终可以依赖的唯一尺寸是sizeof(char) == 1

答案 1 :(得分:5)

在原始问题中,您没有给sizeof打电话。
duskwuff为您解决了这个问题。

产生的输出是:

Size of **temp 1
Size of  *temp 8
Size of   temp 8

<强>原因:

在64位架构上,指针是8字节(无论它们指向什么)

 **temp is of type char ==> 1 byte
  *temp is of type pointer-to-char ==> 8 bytes
   temp is of type pointer-to-pointer-to-char ==> 8 bytes

答案 2 :(得分:2)

如果您在64位计算机上运行MS Visual Studio,则可以将解决方案平台从win32更改为x64,以使用此代码查看指针大小从4字节增加到8字节。

答案 3 :(得分:1)

指针的大小取决于机器。

  

我不明白的是char指针的大小是8

在您的系统上,char指针(即char*变量的大小为8)。在您的代码sizeof(*temp)中给出了char指针的大小,它是8. sizeof(**temp)为1的原因是**tempcharsizeof(char)是1根据定义。

答案 4 :(得分:1)

sizeof运算符由编译器在COMPILE TIME解析。在运行时不会发生实际的差异。运算符大小的返回值是类型的大小。所以

sizeof(*(char *)0) is 1

如果目标平台有64位指针,则sizeof(temp)将为8。 如果目标平台有128位指针,则sizeof(temp)将为16.

“target”并不意味着它是您编译的平台,因为您可以交叉编译。

答案 5 :(得分:1)

指针的大小取决于您的机器(检查您的机器  如果您的机器是64位,那么指针大小是8字节和  32位机器指针大小为4个字节。

无论指针的类型如何,

指针大小都是相同的  指针变量指向。指针类型对指针更有用  算术,使用sizeof运算符时不要与它的大小混淆

答案 6 :(得分:0)

Size of **temp 1
Size of *temp 8
Size of temp 8

它显示了正确的答案。为什么呢?

Because
Size of **temp 1--->> pointing to char.
Size of *temp 8----->>pointing pointer to char.
Size of temp 8---->>>>pointing pointer to pointer to char.

并且您使用的是64位编译器,如果您将在32位编译器上运行此代码,它将为您提供

Size of **temp 1
Size of *temp 4
Size of temp 4
相关问题