因为我在学习 CI 时经常看到指针。
我知道一个指针保存了内存中不同位置的十六进制值。所以指针就是例如:0x7fff5fbff85c
每个指针也是不同的类型。
int var = 10;
int *ptr = &var;
Run Code Online (Sandbox Code Playgroud)
这里的ptr指向var的位置。要获得 var 的值,我必须使用*ptr. 喜欢
printf("Var = %d", *ptr);
Run Code Online (Sandbox Code Playgroud)
将打印 `Var = 10;
但是,如果我对指针进行非内联声明,例如:
int var = 10;
int *ptr;
ptr = &var;
Run Code Online (Sandbox Code Playgroud)
*当我实际将内存地址分配给指针时,我不必在第三行中使用。但是当我得到一个带指针的函数时:
int var = 10;
void assignPointer(int *ptr) {
*ptr = 10;
}
Run Code Online (Sandbox Code Playgroud)
等一下!在我写这篇文章时,我意识到指针有两种不同的分配:
*ptr = 10;
Run Code Online (Sandbox Code Playgroud)
和
ptr = &var;
Run Code Online (Sandbox Code Playgroud)
有什么不同?在第一种情况下,我是否首先取消引用指针,将 10 分配给其持有的位置?在第二种情况下,我将实际位置分配给指针。
我有点困惑何时使用 * 何时不使用赋值。
如果我正在处理数组,为什么我需要指针呢?
int array[];
Run Code Online (Sandbox Code Playgroud)
这里的“array”已经保存了十六进制内存位置。这不使它成为一个指针吗?所以如果我想为数组分配一些东西,我不会写:
*array = [10, 2];
Run Code Online (Sandbox Code Playgroud)
首先我取消引用,然后我分配。
我迷路了 :(
编辑:也许有点不清楚。我不知道当你使用指针时什么时候必须使用 * 什么时候不用。携带十六进制的所有内容都是指针,对吗?数组的变量名携带它的十六进制内存位置。那么为什么它不是一个指针呢? …