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 | -------------/ +----+