【发布时间】:2015-10-31 20:24:15
【问题描述】:
我有关于指针的问题;一理论一实践。
为什么,当在 C 中声明一个指针时,我必须在 *var 前面加上一个类型。如果指针只是一个包含内存地址的变量,为什么编译器/语言需要比指针更多的信息。 int * 和 char * 有什么区别。这是否意味着 int * 指向某个包含 2-4 字节内存的位置,而 char * 仅包含 1?如果最终它是一个指向某个十六进制数字的变量作为 %p 打印它们的证据,那么我从未读过任何关于类型为何重要的基本推理。
其次,给定这段代码
int t = 10;
int *i = &t;
int *j = i;
--
*i == 10;
*j == 10;
为什么 *j 等于 10 而 **j 等于 10?如果 j 是指向 i 的指针,它是指向 10 的 t 的指针,我不需要双重取消引用变量 j 吗?在 xcode 中编写此代码时,它迫使我使用 *j。
所以这些是我对指针感到困惑的几个例子。
【问题讨论】:
-
您可以将
void *pointer;用于任何类型的通用指针。编译器需要类型信息,因此它知道指针算法是如何应用的。 (例如sizeof (char) = 1、sizeof (int) = 4等。) -
第一个问题谷歌指针算法。
-
每个问题只问一个问题。
-
“我从未读过任何关于类型为何重要的根本原因”。继续阅读。