当前位置: 首页 > article >正文

【C++】*和到底如何使用?关于指针的一些理解

在学习C++的过程中,对*和&两个符号的作用有些疑惑与混乱,在观看up小傻羊驼的讲解视频后有所收获,进行笔记记录。

指针

1、先聊聊在声明中 * 的作用

在指针的定义中我们知道指针也就是内存地址,指针变量是用来存放内存地址的变量。

int a; //a是一个整形变量
int * p; //p是一个整形指针变量

没错,在声明变量时,*号的作用是一个标志,标志着声明的这个变量是一个指针变量,在上面的例子中,int和int* 的作用是一样的,都是声明这个变量的类型,只不过int表面后面的变量是整形变量,而int*表明后面的变量是指针变量

char * p; //当然也可以定义别的类型的指针变量
int * p;
int* p;
int *p; //而*前后的空格是不影响的,这三行的声明效果是一样的

2、& 的作用

&又可以称为取址符,顾名思义其作用是引用地址。对于上面int a这样子的变量声明,变量a一定是有一个地址的。而&a指的就是a的地址。
可以理解使用 & 是从变量到地址。

int a = 1;
printf("%d", a); //这行代码会打印出a的值 1
printf("%d", &a); //这行代码会打印出存储a的地址

而指针变量可以存储地址。

int a = 1;
int * p;
p = &a;
printf("%d", &a);
printf("%d", p); //这两行代码的输出是一样的

3、* 的作用

上面说过了在声明中 * 的作用,除此之外,* 的作用是“解引用”。
可以理解使用 * 是从地址到变量。

int a = 1;
int * p;
p = &a;
printf("%d", p); //这两行代码输出a的地址
printf("%d", *p); //这两行代码输出a的变量

经过上面的分析, * 和 & 的作用是互逆的

4、 这么设计的意义

void swap(int a, int b) // 形参是整形变量
{
	int t = a;
	a = b;
	b = t;
}
int main()
{
	int a = 1;
	int b = 3;
	swap(a, b);
	printf("a = %d b = %d", a, b);
}

运行上面代码会得到如下输出:

a = 1 b = 3

可以得知,swap函数交换的只是形参,在主函数中的a和b的值事实上是没有被交换的。
那么如何交换a和b的值呢?这里需要对a和b的地址进行操作。

void swap(int *a, int *b) // 形参是指针变量
{
	int t = *a;
	*a = *b;
	*b = t;
}
int main()
{
	int a = 1;
	int b = 3;
	swap(&a, &b); // 需要传入的是指针变量
	printf("a = %d b = %d", a, b);
}

运行上面代码会得到如下输出:

a = 3 b = 1

http://www.kler.cn/a/589887.html

相关文章:

  • OpenCV实现图像特征提取与匹配
  • 最小二乘法的算法原理
  • 【React】useEffect、useLayoutEffect底层机制
  • 工业物联网的“边缘革命”:研华IoT Edge 设备联网与边缘计算的突破与实践
  • 蓝桥杯[每日一题] 模拟题:蚂蚁感冒(java版)
  • 项目实战系列:基于瑞萨RA6M5构建多节点OTA升级-系统设计<一>
  • ArcGIS Pro中加载在线地图的详细指南
  • 3.1 Spring Boot性能优化:从线程池调优到JVM参数配置
  • java web 安全,如何认证客户端?时间戳和noce如何抵御重放攻击?
  • 8051汇编--条件转移指令
  • 网络框架OkHttp与Retrofit原理剖析
  • Linux-c-粘住位
  • uni-app学习笔记——自定义模板
  • [Java实战]Spring Boot服务CPU 100%问题排查:从定位到解决
  • 爬虫逆向:详细讲述Android底层原理及机制
  • 职业教育五金建设改革解析
  • 0基础 | 直流稳压电源专题3
  • 【Spring】第二弹:通过反射机制初步理解 IoC
  • 本地电脑Java项目发布到公网
  • Java学习第十二天--集合