C++ C++;理解指针
我有一些代码,我正试图分析,以研究指针,我想寻求一些帮助,看看我是否正确地解释了它,如果我不正确,有人能帮我解释它,因为我仍然发现指针很混乱。你将能够看到我的解释权后//C++ C++;理解指针,c++,C++,我有一些代码,我正试图分析,以研究指针,我想寻求一些帮助,看看我是否正确地解释了它,如果我不正确,有人能帮我解释它,因为我仍然发现指针很混乱。你将能够看到我的解释权后// int main() { int x = 5; int y = 3; int a[] = {5, 10, 15}; PointerMystery(&x, y, a); cout << x << " " << y << endl;
int main()
{
int x = 5;
int y = 3;
int a[] = {5, 10, 15};
PointerMystery(&x, y, a);
cout << x << " " << y << endl;
for (int i = 0; i < 3; i++) {
cout << a[i] << " ";
}
cout << endl;
return 0;
}
void PointerMystery(int *pa, int b, int c[]) {
// *pc will return array c
int *pc = c;
// *pa which returns the address of x will now make x = 20.
*pa = 20;
// b which was 3 is now equal to 15, therefore y = 15
b = 15;
// *pc which returned a array is now 15(im not so sure about this?)
*pc = b;
// im not sure what is happening here either?
pc += 2;
// *pc will return the value (20) - 10?
*pc = *pa - 10;
cout << *pa << " " << b << " " << *pc << endl;
for (int i = 0; i < 3; i++) {
cout << c[i] << " ";
}
cout << endl;
}
intmain()
{
int x=5;
int y=3;
int a[]={5,10,15};
指针系统&x,y,a);
指针变量正是它们的名字所暗示的,指向某个东西的变量
如果你以图形化的方式一步一步地思考,可能会更容易理解。所以
调用pointersystemy
函数时,变量有pa
、b
和c
:
+----+ +---+
| pa | --> | 5 |
+----+ +---+
+---+
| 3 |
+---+
+---+ +----+----+----+
| c | --> | 5 | 10 | 15 |
+---+ +----+----+----+
然后执行*pa=20;
,因此
+----+ +----+
| pa | --> | 20 |
+----+ +----+
然后增加指针pc
,指向传递数组的第三个元素:
+---+ +----+----+----+
| c | --> | 15 | 10 | 15 |
+---+ +----+----+----+
^
+----+ |
| pc | -------------/
+----+
关于指针,我们还应该了解另一件事,数组在传递给函数时会衰减为指向其第一个元素的指针。这就是为什么c
是指针以及它指向的位置
此外,您还可以对数组和指针使用数组索引语法和指针语法。您可以对数组执行此操作,因为数组会衰减为指向其第一个元素的指针,而指针是*(ptr+x)
的缩写。事实上,对于指针和数组,*(ptr\u或\u array+x)
相当于ptr\u或\u array[x]
最后一位还解释了为什么向pc
指针中添加两个会使其指向第三个元素,*(pc+0)
相当于pc[0]
,*(pc+2)
相当于pc[2]
,因为数组索引是以零为基的,所以它是第三个元素。你可以很容易地测试你的想法。pc+=2;
在数组中移动你的两个位置c[]
。小心不要跑过数组的末尾。谷歌“指针算术”有关详细信息,请参见。数组在作为参数传递给函数时会衰减为指针,因此在函数中变量c
已经是指针。使用解引用运算符时,您不会获取指针的地址,而是获取指针指向的值。要获取存储在指针中的地址,只需使用指针本身(指针本质上是整数变量,其值是地址)。只需调试代码!为什么您认为这值得一提?
+---+
| c | --\
+---+ \ +----+----+----+
>-> | 15 | 10 | 15 |
+----+ / +----+----+----+
| pc | -/
+----+
+---+ +----+----+----+
| c | --> | 15 | 10 | 15 |
+---+ +----+----+----+
^
+----+ |
| pc | -------------/
+----+
+---+ +----+----+----+
| c | --> | 15 | 10 | 10 |
+---+ +----+----+----+
^
+----+ |
| pc | -------------/
+----+