一个指针可以指向两个或多个变量

时间:2019-06-12 00:27:06

标签: c++ pointers

例如,下面我刚开始使用下面的代码处理指针。

#include<stdio.h>
int main(){
    int x = 3;
    int y = 7;
    int *ip; //creating int pointer ip
    ip = &x; // ip storing the address of x
    printf("Address of x: %d\n", ip);
    *ip = 5;
    printf("Address of x: %d\n", ip);
    ip = &y; // ip also storing the address of y 
    printf("Address of y: %d\n", ip);
    *ip += 11;
    x += *ip;
    printf("%d\n", x); // value is 23
    printf("%d\n", y); // value is 18
    printf("%d\n", *ip); // value is 18
}

代码运行正常,我想知道为什么。我在想指针开始保存变量y的地址之后,由于指针不再指向该地址,因此使用指针指向x时所做的更改应该被还原。

3 个答案:

答案 0 :(得分:3)

  

单个指针能否指向两个或多个变量

不,单个指针只能指向一件事。那东西可能是int,数组(或数组的元素)或其他东西。

但是,从那时起,您可以使用指针并使其指向其他对象!就像其他int或数组的其他元素一样。

您已经使用=赋值运算符完成了此操作:

ip = &y;

现在,它不再指向x;它指向y


  

我在考虑指针开始保存变量y的地址后,由于指向x的指针不再保存该地址,因此使用该指针所做的更改应该被还原。

这是对指针功能的误解。指针不存储您通过它进行的分配。它甚至都不知道它们。这不是一个掩码,它会暂时掩盖现有对象的值,该值只能在指针与该对象相关的持续时间内才能观察到。这是一个指针。它指向事物。

它所做的只是提供对x(及以后的y)的访问。而已。期。您对x(及以后的y)所做的一切都在您和x(及以后的y)之间。以后重新绑定指针绝对不会对这些操作产生“撤消”作用。

为什么代码有效?因为您遵循了语言规则并编写了有效的程序。

答案 1 :(得分:1)

指针是一个值的引用,就像房间号一样。 '<API><Result><ErrorCode ErrorType=\"Success\">0</ErrorCode<ReturnCode>0</ReturnCode></Result><API>' 表示ip是房间号。

int *ip;表示ip = &x;是现在的房间数ipx表示将*ip = 5;设置在房间中,编号为5,x = 5; x更改ip = &y;是现在ip的房间数。

很明显,您在yprintf("x's address is %x, y's address is %x, ip is %x\n", &x, &y, ip)语句中加入了ip = &x;

答案 2 :(得分:-1)

<h5>Two paragraphs will have no border</h5> <div> <p>haha</p> <p>hoho</p> </div> <br/> <h5>Three or more paragraphs will have a border</h5> <div> <p>haha</p> <p>hoho</p> <p>haha</p> <p>hoho</p> </div>将x的地址存储为ip的值,然后存储其他人的可变地址。但是,为什么需要指针?如果确实如此,您是否考虑过智能指针?