我有关于指针的问题;一个理论的,一个实践的。
为什么在 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 的指针,它是一个指向 t 的指针,它是 10,那么我不需要对变量 j 进行双重解引用吗?在 xcode 中编写此代码时,它迫使我使用 *j。
所以这些是我对指针感到困惑的几个例子。
最佳答案
需要数据类型才能知道取消引用指针时要读取多少字节。
int *i = &t;
这里,i
中存储的值是t
的地址。
int *j = i;
所以现在,存储在j
中的值就是存储在i
中的值,也就是t
的地址。如果您想进行双重取消引用,则需要存储 i
的地址。
int **j = &i
关于c - 关于C指针的两个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33456201/