c - 关于C指针的两个问题

标签 c pointers

我有关于指针的问题;一个理论的,一个实践的。

为什么在 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/

相关文章:

c - 从一棵空树开始,用大 O 表示法插入红黑树的复杂度是多少?

c - 如何访问 C 函数之外的全局指针?

c - free() 函数不起作用

c++ - 将按引用传递的变量分配给结构成员时会发生什么

c - 在 C 中的结构中调整数组的大小

c - 令人困惑的结构提示

c - 有没有办法警告这个指针错误?

c - C 中使用条件运算符拆分字符串表达式

c++ - 我是否正确初始化了我的 C++ 引用变量?

仅当存在打印时代码才能正确执行 (C)