* 和&

本文深入探讨了指针和地址的基本概念,解释了如何使用&运算符获取变量的地址,以及如何通过*运算符访问指针所指向的内存位置。理解这些核心概念对于掌握高级编程技巧至关重要。

&取地址 &a指的是取a的地址

*a 表示一个指针 (x=*p 把指针p指向的值赋值给x)

 

在C++中,`*``&`是两个重要的运算符,它们在不同的上下文中有不同的含义用途。以下是它们的主要区别: ### `*` 的用法 - **指针声明**:在声明变量时,`*` 用于声明一个指针变量。例如: ```cpp int *p; // p是指向一个整数类型的指针 ``` 这里 `p` 是一个指针,它可以存储一个整数的地址[^1]。 - **复合指针**:可以使用多个 `*` 声明复合指针。例如: ```cpp int **p; // p是一个指向一个指向整数类型的指针的指针 ``` - **解引用**:在使用指针时,`*` 用于解引用指针,即访问指针所指向的对象。例如: ```cpp int a = 10; int *p = &a; int x = *p; // 把指针p指向的值赋值给x ``` 这里 `*p` 表示 `p` 所指向的整数,即 `a` 的值 [^1]。 - **强制类型转换解引用**:`*(Type*)` 表示将某个值强制转换为指向 `Type` 类型的指针,然后对该指针进行解引用操作。例如: ```cpp int value = 123; void *ptr = &value; int result = *(int*)ptr; // 将ptr强制转换为int*类型,然后解引用 ``` 这里 `*(int*)ptr` 表示将 `ptr` 强制转换为指向 `int` 类型的指针,然后访问该指针所指向的对象 [^4]。 ### `&` 的用法 - **求地址运算符**:`&` 用于获取变量的地址。例如: ```cpp int a = 10; int *p = &a; // 把a的地址赋给p(指针) ``` 这里 `&a` 表示变量 `a` 的内存地址 [^1]。 - **引用声明**:在声明变量时,`&` 用于声明一个引用。引用是变量的别名,它们指向同一个内存地址。例如: ```cpp int a = 10; int &ref = a; // ref是a的引用 ``` 这里 `ref` 是 `a` 的别名,对 `ref` 的操作等同于对 `a` 的操作 [^3]。 ### 示例代码 以下是一个简单的示例代码,展示了 `*` `&` 的用法: ```cpp #include <iostream> int main() { int a = 10; int *p = &a; // 取得a的地址 int &ref = a; // ref是a的引用 std::cout << "a = " << a << std::endl; // 输出: a = 10 std::cout << "*p = " << *p << std::endl; // 输出: *p = 10 std::cout << "ref = " << ref << std::endl; // 输出: ref = 10 // 修改通过指针引用 *p = 15; // 通过指针修改a ref = 20; // 通过引用修改a std::cout << "After modification:" << std::endl; std::cout << "a = " << a << std::endl; // 输出: a = 20 std::cout << "*p = " << *p << std::endl; // 输出: *p = 20 std::cout << "ref = " << ref << std::endl; // 输出: ref = 20 return 0; } ``` ### `*&` 的组合使用 `*&` 组合使用时,`&` 先获取变量的地址,然后 `*` 对该地址进行解引用操作,结果还是变量本身。例如: ```cpp #include <iostream> int main() { int a = 123; int *p = &a; std::cout << "*&p: " << *&p << std::endl; // *&p表示&p指向地址内存空间的值,即p本身 std::cout << "**&p: " << **&p << std::endl; // **&p表示a的值 return 0; } ``` 这里 `*&p` 表示 `p` 本身,`**&p` 表示 `p` 所指向的对象,即 `a` 的值 [^2]。 ### 总结 - `*` 主要用于指针的声明解引用操作,允许间接访问内存中的对象。 - `&` 主要用于获取变量的地址声明引用,引用提供了一种更方便的方式来操作变量。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值