【发布时间】:2017-11-29 13:57:05
【问题描述】:
这可能是一个菜鸟问题..但这真的让我很困惑..
下面是一些示例代码
void main() {
int a = 300;
char *ptr = &a;
int *intptr = &a;
printf("%d\n %d\n", *ptr, *intptr);
}
输出:
44
300
据我了解,为什么取消引用*ptr 打印 44 是因为 char 指针是一个字节,因此它只从 int 的地址读取 8 位...
但是这个question:What is the size of a pointer?声明Regardless of what data type they are pointing to, they have fixed size
我错过了什么。为什么取消引用 char 指针会打印 44,如果指针大小相同?
【问题讨论】:
-
以上代码中没有任何内容涉及指针大小。
-
顺便说一句 256 + 44 = 300
-
指针的大小与它指向的大小不同。这里
char *ptr说*ptr是char。结果很复杂,因为它确实没有指向char。 -
在您的示例中,您的指针不仅具有相同的大小,而且具有相同的值。但是当取消引用时,其中一个加载一个字节,而另一个加载一个整数。为什么会让人困惑?
sizeof(ptr)是指针大小。sizeof(*ptr)是它指向的数据类型的大小。 -
warning: initialization from incompatible pointer type [-Wincompatible-pointer-types] char *ptr = &a;