C 如何将指针递增后的概念可视化?
指针是指向内存中某个位置的变量C 如何将指针递增后的概念可视化?,c,pointers,C,Pointers,指针是指向内存中某个位置的变量 int *pointer1; int *pointer2 = pointer1; 假设这两个变量都指向内存位置 0xA 然后我表演 pointer2++; 现在,pointer2指向 0xB 因为两个地址都指向同一个地方,所以我完全希望pointer1指向同一个地方 0xB 但事实并非如此指针1仍然指向0xA 这怎么可能?指针是否有另一个地址来指定它实际上是哪个指针?如果是,第二个地址叫什么?指针虽然有特殊的特征,但都是数字。在这方面,就好像pointe
int *pointer1;
int *pointer2 = pointer1;
假设这两个变量都指向内存位置
0xA
然后我表演
pointer2++;
现在,pointer2
指向
0xB
因为两个地址都指向同一个地方,所以我完全希望pointer1
指向同一个地方
0xB
但事实并非如此<代码>指针1仍然指向0xA
这怎么可能?指针是否有另一个地址来指定它实际上是哪个指针?如果是,第二个地址叫什么?指针虽然有特殊的特征,但都是数字。在这方面,就好像
pointer1
和pointer2
是整数,正好有相同的值。如果增加一个,则不会自动增加另一个。将指针中存储的值与指针指向的值混淆
这两个指针本身是完全独立的,它们恰好指向同一个内存位置。当你写作时
pointer2++;
您增加的是存储在指针2中的值(即它指向的地址),而不是存储在指定位置的值;作为指针
和指针2
自变量,没有理由指针
也应该更改其值
更形象地说:
int var=42;
int * ptr1 = &var;
int * ptr2 = ptr2;
假设var
存储在内存位置0x10,我们将遇到以下情况:
+----------+
| | 0x00
+----------+
| | 0x04
+----------+
| | 0x08 +------------+
+----------+ +------| ptr1: 0x10 |
| | 0x0C | +------------+
+----------+ | +------------+
| var: 42 | 0x10 <----+------| ptr2: 0x10 |
+----------+ +------------+
| | 0x14
+----------+
| | 0x18
+----------+
| |
(由于指针运算,存储的地址增加了sizeof(int)
,这里我们假设为4)
+----------+
|| 0x00
+----------+
|| 0x04
+----------+
|| 0x08+------------+
+----------++----ptr1:0x10|
|| 0x0C |+------------+
+----------+ | +------------+
|var:42 | 0x10pointer1
是一个包含int*
类型值的对象
pointer2
是另一个也包含int*
类型值的对象
如果更改指针2
中包含的值,则没有理由认为指针1
中的值也会更改。任何其他类型的值都会发生完全相同的情况。例如,使用double
double a = 4.2;
double b = a;
b /= 10;
/* is `a` now 4.2, or 0.42?? */
行int*pointer2=pointer1代码>您正在将存储在指针1的地址复制到指针2。两者都是自变量。如果要更新存储在指针1到指针2的地址,则需要指针的指针:
int **pointer2 = &pointer1;
(*pointer2)++;
对于第二个和第三个问题:是的,指针1的地址叫做&pointer1。
double a = 4.2;
double b = a;
b /= 10;
/* is `a` now 4.2, or 0.42?? */
int **pointer2 = &pointer1;
(*pointer2)++;