C语言-指针

来源:互联网 发布:小区网络布线 编辑:程序博客网 时间:2024/05/23 11:56

1判断指针的类型
只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。

(1)int*ptr;//指针的类型是int*(2)char*ptr;//指针的类型是char*(3)int**ptr;//指针的类型是int**(4)int(*ptr)[3];//指针的类型是int(*)[3](5)int*(*ptr)[4];//指针的类型是int*(*)[4]

2指针所指向的类型
把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。

(1)int*ptr; //指针所指向的类型是int(2)char*ptr; //指针所指向的的类型是char(3)int**ptr; //指针所指向的的类型是int*(4)int(*ptr)[3]; //指针所指向的的类型是int()[3](5)int*(*ptr)[4]; //指针所指向的的类型是int*()[4]

3常量指针和指针常量的区别

一) 常量指针。
常量是形容词,指针是名词,以指针为中心的一个偏正结构短语。这样看,常量指针本质是指针,常量修饰它,表示这个指针乃是一个指向常量的指针(变量)。
指针指向的对象是常量,那么这个对象不能被更改。
在C/C++中,常量指针是这样声明的:

1const int *p;2int const *p;

二) 指针常量
指针是形容词,常量是名词。这回是以常量为中心的一个偏正结构短语。那么,指针常量的本质是一个常量,而用指针修饰它,那么说明这个常量的值应该是一个指针。
指针常量的值是指针,这个值因为是常量,所以不能被赋值。
在C/C++中,指针常量这样声明:

int a;int *const b = &a; //const放在指针声明操作符的右侧

三)指向常量的指针常量

顾名思议,指向常量的指针常量就是一个常量,且它指向的对象也是一个常量。
因为是一个指针常量,那么它指向的对象当然是一个指针对象,而它又指向常量,说明它指向的对象不能变化。
在C/C++中,这么声明:

const int a = 25;const int * const b = &a;

看,指针声明操作符左边有一个const,说明声明的是一个指向常量的指针。再看,指针声明操作符右边有一个const,说明声明的是一个指针常量。前后都锁死了,那么指向的对象不能变,指针常量本身也不能变。

4野指针与空指针区别

空指针是个特殊的指针值,也是唯一一个对任何指针类型都合法得指针值
野指针,也就是指向不可用区域的指针,通常对这种指针进行操作的话,将会使程序发生不可预知的错误。
或者说,野指针是用free释放后的指针,要复制NULL才能避免野指针的出现,而空指针就是指向NULL

5右左法则是通用的吗
右左法则是一个既著名又常用的方法,不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辨识一个声明的,两者可以说是相反的。

6 void:万能指针
万能指针void被称为通用指针或泛指针,它指向的对象不属于任何类型,是C语言关于纯粹地址的约定