gpt4 book ai didi

c - 这个简单的指针程序输出的解释是什么

转载 作者:太空宇宙 更新时间:2023-11-04 07:33:20 26 4
gpt4 key购买 nike

我试图了解用于存储变量和指针、指针-指针和指针-指针-指针的地址大小。结果有点令人困惑。

代码如下:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

int main(void)
{
char *** ppptr_string = NULL;
int *** ppptr_int = NULL;
double *** ppptr_dbl = NULL;

char c=0; int i=0; double d=0;

printf("\n %d %d %d %d %d\n", sizeof(&ppptr_string),
sizeof(ppptr_string), sizeof(*ppptr_string), sizeof(**ppptr_string),
sizeof(***ppptr_string));
printf("\n %d %d %d %d %d\n", sizeof(&ppptr_int), sizeof(ppptr_int),
sizeof(*ppptr_int), sizeof(**ppptr_int), sizeof(***ppptr_int));
printf("\n %d %d %d %d %d\n", sizeof(&ppptr_dbl), sizeof(ppptr_dbl),
sizeof(*ppptr_dbl), sizeof(**ppptr_dbl), sizeof(***ppptr_dbl));


printf("\n sizeof(char) = %d, sizeof(int) = %d, sizeof(double) = %d",
sizeof(c), sizeof(i), sizeof(d));
printf("\n sizeof(&char) = %d, sizeof(&int) = %d, sizeof(&double) = %d",
sizeof(&c), sizeof(&i), sizeof(&d));

getch();
return 0;
}

现在是困惑。我可以看到在这台机器上变量地址总是 2 个字节长。无论变量的类型如何,也不管它是否是指针变量。但是为什么这里有这么多条目我得到的大小是 4?无论类型如何,指针的大小始终为 4。存储变量的 >address< 的大小为 2。指向的内容的大小取决于类型。

为什么我在 sizeof 的输出中得到 4s?

我在 Borland C++ 5.02 上的输出 enter image description here

最佳答案

如果你有一个类型 T 和一个类似 T*** ptr 的指针,那么 ptr, *ptr , **ptr 本身就是指针。您可能正在 32 位系统上工作(或编译 32 位应用程序),所以 sizeof(ptr) == sizeof(*ptr) == sizeof(**ptr):

--- Program output --- 4   4   4   4   1 4   4   4   4   4 4   4   4   4   8  sizeof(char) = 1,   sizeof(int) = 4,   sizeof(double) = 8 sizeof(&char) = 4,  sizeof(&int) = 4,  sizeof(&double) = 4

&ptrT*** 上的地址/指针,所以它的大小也是4。仅当您将指针取消引用到其最大级别 (***ptr) 时,您才会拥有实际类型而不是另一个指针。

关于c - 这个简单的指针程序输出的解释是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11276784/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com