初学者使用c++指针的方法
指针介绍
局部变量
int x = 0;
指针变量
int* x = 0; //当指针变量赋值为0时代表指向空地址
当变量的值指向堆空间中的地址时,该变量即为指针变量。
用面向对象的思想使用指针
在google的c/c++代码规范中有提到过,指针变量的“*”号应该写在变量类型后,而不要写在变量名前。
int* x = 0;//google 提倡写法
int *x = 0;//不提倡这种写法
或许这种样子并不能让我们理解到为什么这么写的意义,但是。
typedef int* Integer;
如果我们给指针类型起一个别名呢?(这里的别名仅是方便阅读使用)那么我们接下来使用这个指针变量的时候就可以不去管那个恼人的“*”符号,而专心于编写业务逻辑了。
Integer x = 0;
是不是这样子更能让人接受了呢?只不过这个变量的取值范围是地址,0x00000001
变量值的样式都是以这样的形势出现。所以,当你给一个指针变量赋值为20时编译器就会报错,就像是你将一个string类型的字符串赋值给了一个int类型的变量。
int x = "hello world"; //error
但是内存地址不容易记忆,如果我们再给指针变量赋值时都使用内存地址的话无疑会提升我们的负担,所以便有了一个运算符去"&"去帮助我们获取到地址。
int i = 0;
Integer x = &i;
如果你觉得“&”仍然让你困惑,不妨试着写一个类似于构造函数的方法去加深你的印象。
int i = 0;
Integer Integer(int inputNum) { //当然这个方法名可以任取,这里使用Integer是为了和构造函数类似
Integer addr = &inputNum;
return addr;
}
Integer x = Integer(i);
那么此时如果你想要创建一个int类型的指针变量只需要Integer x = Integer(i)
这么写就可以了。
此时我们变量x
的值就是一个地址,但是我们在使用指针的使用不仅是能获取到变量地址,也可以通过地址去获得变量的值。在以往的做法中我们是在指针变量的前面加上一个"*"号,如下所示:
int num = 1;
int* i = &num
printf(i) //0x0000001 瞎打的大概是这么个意思
printf(*i) //输出为1
那么此时输出为1的这个"*“到底是什么呢?其实这个符号代表的是一个指针运算符,与”&"符号类似。意思是取得指针变量指向的地址中存入的值,这么说可能有些拗口。将这个符号改写成一个方法来记忆。
int* i = #
*i == num; //true
int getValue(int* input) {
return *input;
}
getValue(i) == num; //true;
用一张图来解释
本来指针变量指向的是地址,经过一次*运算后变为指向1
结语
最近因为工作原因接触了c/c++,对于指针的操作和理解仅是似懂非懂,如果有错欢迎指正。