指针(*)、取地址(&)、解引用(*)与引用(&)

本文详细介绍了C++中的指针、取地址运算符(&)、解引用(*)以及引用的概念和用法。通过示例程序展示了如何定义指针、获取变量地址、解引用指针以及引用的别名特性。指针可以存储变量的地址,而引用则是变量的别名,修改引用的值会直接影响其所绑定的变量。
摘要由CSDN通过智能技术生成

指针(*)、取地址(&)、解引用(*)与引用(&)

C++ 提供了两种指针运算符,一种是取地址运算符 &,一种是间接寻址运算符 *。

指针是一个包含了另一个变量地址的变量,您可以把一个包含了另一个变量地址的变量说成是"指向"另一个变量。变量可以是任意的数据类型,包括对象、结构或者指针。

指针与取地址

例程:

int main() {
    int num = 3;
    int* p = #			// 将变量num的地址取出来,存到指针p中
    printf("%d 的地址是 %p\n", num, p);
    return 0;
}

输出

3 的地址是 0x7ffeefbff3ac

上面int* p定义了一个指针p,这个指针指向的地址所存放的变量的数据类型是int,在本例程中,即是指向int型变量num,而p的值即是变量num的地址。

而&num中的&是取地址操作符,当&作用于一个对象上时,它返回了该对象的地址,比如例程中的&num即是为变量num的地址。

解引用与指针赋值

例程

int main(){
	int num = 7;  
	int* p = #  
	printf("数值%d所在的地址是 %p\n", num, p);  
	printf("指针p所指向的地址为 %p , 该地址上所保存的值为%d\n", p, *p);  
	*p = 100;  
	printf("指针p所指向的地址为 %p , 该地址上所保存的值为%d\n", p, num);  
	return 0;  
}

输出:

数值7所在的地址是 0x7ffeefbff3b8
指针p所指向的地址为 0x7ffeefbff3b8 , 该地址上所保存的值为7
指针p所指向的地址为 0x7ffeefbff3b8 , 该地址上所保存的值为100

注意这里*操作符为解引用操作符,它返回指针p所指的对象的值(注意不是地址)。

我们可以对*p赋值(对左值赋值),从而改变p所指的地址上所保存的值,从而改变此地址所存储的变量num的值。(上面num的值变为100)

当然,我们也可以给指针p赋值,使其指向另外一个地址(这样就改变了在解引用时获取的左值):

int main(void)  
{  
    int num = 7, another = -5;  
    int *p = #  
    p = &another;  
    printf("%d\n", *p);//此时p指向了another,所以输出了another的值,即-5  
    return 0;  
}  

输出

-5

引用

最通俗的解释:引用就是起别名

引用在C中没有,在C++中才有。

  
int main()  
{  
    int val = 7, val2 = 999;  
    int &refval = val, &refval2 = val2; //引用必须要初始化,使其绑定到一个变量上  
    //修改引用的值将改变其所绑定的变量的值  
    refval = -12;  
    printf("%d %d\n", val, refval);//-12,refval的值和val一样  
      
    //将引用b赋值给引用a将改变引用a所绑定的变量的值,  
    //引用一但初始化(绑定),将始终绑定到同一个特定对象上,无法绑定到另一个对象上  
    refval = refval2;  
    printf("%d %d\n", val, refval);//999  
    return 0;  
}  

输出

-12 -12
999 999

总结

*操作符:

  1. 定义一个指针

    int* p;
    
  2. 将一个指针(地址)解引用得到改地址所存的值

    cout << *p << endl;
    

&操作符

  1. 取地址,将某个变量在内存中所存放的地址拿到

    cout << &num << endl;
    
  2. 引用,进行引用,可以理解为给变量起别名,作用在引用上的所有操作事实上都是作用在该引用所绑定的对象上。

    int val = 7;
    int &refval = val;
    

Ref:

https://www.runoob.com/cplusplus/cpp-pointer-operators.html

  • 70
    点赞
  • 183
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 指针*可以连用是因为它表示解引用操作,即获指针所指向的变量的值。例如,如果有一个int类型的指针p,那么*p就是p所指向的int类型变量的值。因此,可以使用连续的指针*来获多级指针所指向的变量的值。 地址符号&不能连用是因为它表示获变量的地址。一个变量只有一个地址,因此不能使用连续的地址符号&来获变量的地址。例如,如果有一个int类型的变量a,那么&a就是a的地址,不能使用&&a来获a的地址。 ### 回答2: 指针*连用的原因是为了表示所指向的值。在C语言中,指针是一个特殊类型的变量,它不存储实际的值,而是存储一个内存地址,指向内存中的某个位置。 当我们需要访问指针所指向的值时,可以使用值操作符*。值操作符*可以将指针所指向的地址的内容提出来,返回一个与指针所指向的值类型相匹配的值。这样,我们就可以通过指针来访问和修改实际存储在该内存地址处的值。 而地址符号&用于获变量的内存地址。当我们需要获一个变量的地址时,可以使用地址符号&加上变量名称,得到该变量所在内存地址。 这两个操作符的连用,可以满足我们对于指针的基本需求。我们可以定义一个指针变量,然后通过地址符号&获另一个变量的地址,然后将这个地址赋值给指针变量。接着,使用值操作符*可以获地址所对应的值。 总之,指针*可以连用是为了方便我们通过指针来访问、修改内存中存储的值,地址符号&则是用于获变量的内存地址。这两个操作符的连用可以满足我们对指针的基本需求,提供了灵活而强大的编程能力。 ### 回答3: 指针C语言中的一种特殊数据类型,它用于存储和处理变量的内存地址指针由两部分组成,即指针变量和所指向的内存地址。 首先,让我们来了解指针变量的作用。指针变量用于存储内存地址,通过它可以访问和操作这些内存地址所对应的数据。为了声明一个指针变量,我们需要使用一个指针类型的关键字(例如int、char等)以及一个星号*。这个星号告诉编译器我们要声明一个指针。 在C语言中,我们可以使用一个星号*来进行值操作,也就是通过指针变量来获指针所指向的内存地址对应的值。这个星号告诉编译器我们要对指针进行解引用。 另外,我们还可以使用一个地址符号&来获一个变量的内存地址。这个&符号告诉编译器我们要获变量的地址。 那么为什么指针*可以连用,地址符号&呢? 首先,指针变量的声明需要使用一个星号*,这是C语言的语法规定。 其次,指针解引用操作通过一个星号*来实现,这个星号告诉编译器我们要获指针所指向的内存地址对应的值。 最后,地址符号&用于获一个变量的内存地址,这样我们就可以通过指针变量来访问和操作这个变量。 因此,指针*和地址符号&是C语言中的两个重要标识符,它们的使用是为了能够有效地管理和操作内存地址,实现灵活的数据处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值