C++学习之:指针

1.空指针

    指针在使用之前必须初始化,没有初始化的指针可能指向任意地址,对这些指针操作可能会导致程序错误,如果在定义数组时还不知道数组指向什么位置,可以初始化为空指针,空指针没有指向任何空间,空指针用常量NULL表示,NULL的值一般赋为0,不能引用空指针指向的值。比如:

char* alarm;
*alarm='c';//报错‘使用了未初始化的局部变量 alarm ’

2.指向常量的指针(常量指针):可访问指向地址存放的值,但不能修改指向地址存放的值

    是一个指向的内容是常量的指针变量。常量指针只限制指针的间接访问,而指针本身的访问不受限制。

const int* p=&a;//定义一个指向整型常量的指针p,并在初始化时让其指向整型变量a

如上定义使用了const,说明指针指向的内容是常量,因此*p不能修改,而p可以修改。如果程序中出现类似:

*p=20;

    则会提示“左值是一个常量”。但是由于p是一个普通的指针变量,可以让指针指向另外一个地址。

3.指针常量:指针所指向地址是常量,不可改变。但内存所存放值可以修改。

    指针本身是个常量,它固定指向某一变量。因此它本身的值不能改变,但它指向的地址中的值是可以改变的。如:

int *const p=&a;

    如上定义了一个名为p的指针常量,指向变量a的地址,并且永远都只能指向a的地址,不能再指向其他地址,但它指向的地址中存放的值是可以改变的。

4.指向常量的的指针常量:指针本身不能改变,指向的地址中的值也不能改变。如:

const int* const p=&a;

    注意:const的位置是规律的。const在哪一个语法单元前,限制的就是那一个部分。如 const int* p中const在int前,限定的就是int值是不变的,即指针指向的内存中存放的值是不能变的。对于int *const p,const在p前面,限定的就是p,即指针值是不能变的。

5.指针与数组

    数组名保存了数组的起始地址,也就是说数组名是一个指针,但是这个指针指向的地址是不能变的,即是指针常量。

char ch[8]="hello,world';
char *p;

    如果执行p=ch的操作,则p与ch是等价的,对该p指针可以进行任何有关数组下标的操作。

    定义数组时为数组的各个元素分配 全部的存储区,而在定义指针时,仅仅分配四个字节的储存区存放指针的地址。只有把一个数组名付给对应的指针后,指针才能作为数组使用。所以不是指针变成了数组,指针还是指针,只是指针指向了数组的起始地址,所以指针就具有了和数组名同样的行为了,因此可以通过下标访问变量。

6.动态变量

如果需要在程序运行过程中才能确定需要申请多大的内存空间,可以使用动态内存分配。要使用动态变量,需要定义一个相应类型的指针,然后通过动态变量申请的功能向系统申请一块空间。

7.输出参数与输出参数(IN /OUT)

输入参数一般用值传递,输出参数必须用指针传递。在设计函数原型时,一般将输入参数放在前边,输出参数放在后面。

猜你喜欢

转载自blog.csdn.net/wu_qz/article/details/80203510
今日推荐