是很久很久没有碰C++了,上次用可能还是大一的时候,重新看起C++ Primer Plus。这次来先简单讲讲指针
指针是C++很重要的一个东西,指针是一个变量,其存储的是值的地址,而不是值本身。
int a = 5;
int* b = &a; //b就是int a的地址(&为取址符)
1、声明指针及初始化
指针是有类型的,可以知道这个指针指向的类型是占字节,从而分配地址空间。(虽然指向的类型不同,可以是char,可以是double,但str和ptr两个变量本身的长度相同,这两个地址的长度是相同的,具体是2个字节还是4个字节看具体计算机系统)
//typeName* pointerName
//e.g
char* str
double* ptr
记得声明指针以后要进行初始化。将地址赋值给指针。这里又会产生一个容易犯的小错误。
或者初始化可以用new,这样子会分配可用空间给int,配合delete释放内存
int* ptr = new int;
*ptr = 1001
delete ptr
2、对指针解引用
对指针解除引用意味着获得指针指向的值。对指针应用解除引用或间接值运算符(
*
)来解除引用。因此,如果像上面的例子中那样,pn
是指向
bubble
的指针,则
*pn
是指向的值。
char* pn;
char bubble = 'a';
pn = &bubble;
cout << *pn // 会输出bubble的值‘a’
*pn = 'S' // 会将bubble的值变成‘S’
其实数组表示法也是对指针解除引用,pn[0]与*pn是一样的。!!!但一定不能对没有初始化为适当地址的指针解除引用。
3、指针算数
4、数组表示发和指针表示法
最后出一道题,如果能做出来说明指针的基本使用应该是没有问题了
int arr[6] = {1,2,3,4,5,6};
int* ptr = (int*)(&arr + 1);
cout << *(ptr - 1);
//得到的结果为6