C/C++中的指针(小白都懂)

斜体样式学习C语言一个很重要的事情就是指针和内存管理,但是对于很多人来说这恰恰是最难的部分,我在几个月的折腾后终于搞清楚了一点。接下来就指针和数组发表一下我的看法。
指针最常见的就是 * 和 & 这两个而且这两个都是对内存进行操作的,所以初学者可能会对此产生疑惑,刚开始我也是分不清这两个到底什么关系。

在这里先声明一下,C语言的函数传递方式是传值,简单来说就是程序内部传递的是一个数值,这个数值可以是字符可以是字符串还可以是数字,因为字符是以ASCII码值存储的。指针变量和普通变量有什么区别呢?其实我认为是一种直接和间接的区别,C/C++可以直接操作计算机内存,因此可以充分发挥计算机的性能,也因此在一些运行效率比较高的地方运用的比较多,比如很多大型游戏就是用C++进行开发的,因此C/C++的核心就是指针和引用(C++中的,后面再讲)。因此对于指针变量和普通变量,函数间进行通信的时候还是按照值来传递,普通变量先找到参数再找内存,传递的时候先转化为指针,再转化为具体值,相当于进行了多余的操作,而且对于结构体来说,可能修改变量值并不能修改内存的值,所以出现一些结构体的值无法修改的情况。但是对于指针来说直接寻找内存,并且对内存进行操作,可以直接修改内存的值。

但是内存只是一个用来储存变量的地址,并不能进行数值的一些计算,因此如果要进行运算,必须转化为普通变量,这里就要用到 * 号,它可以将变量的地址转化为一个可以运算的值,因此可以进行正常的操作,而 & 则相反,它可以找到这个变量在计算机中的地址,这两个是相反的操作,接下来我用一段代码来演示。

    int* p;
	p = new(int);
	*p = 1;
	cout << p << endl;
	cout << *p << endl;

结果输出为000001D7483A5E00
1
由此可见 p 实际上为一个地址,储存1的地址。
而 *p进行将p的地址转化为一个可以参与运算的量

	int p = 1;
	cout << p << endl;
	cout << &p << endl;

而输入这个后输出为
1
0000001E8FCFF624
可以看出p是1;
但是计算机中储存p是以地址来储存的在此例中为0000001E8FCFF624

综上所述,* 和 &只是对地址进行运算的符号,一个解开地址得到值,另一个解开值得到地址。

猜你喜欢

转载自blog.csdn.net/u014146044/article/details/106203165