本文共 1537 字,大约阅读时间需要 5 分钟。
1.int *p;
p是一般指针,用于指向整形量。被指向的整形量可以是简单的整形量,也可以是一维整形数组或二维整形数组中的一个元素,因为数组的每一个元素都是整形量。int *类型的指针与一维整形数组名在数据类型上等价,即一维整形数组名是指针,其类型也是int *。注意,p是指针变量,其值可变;而数组名是指针常量,其值不可变。 2.int (p)[M]; p指向含有M个元素的一维数组。可指向每行含有M个元素的二维数组的一样,也就是说他是二维数组的行指针,p与二维数组名在数据类型上等价。若有定义“int a[N][M];”,则p和a的类型都是int ()[M]。 例如:int a[3][4],(*p)[4];p=a; //将数组a的首地址赋值给指针p,p指向a[0]p++; //正确,因为p是指针变量,p指向a[1],A行a++; //错误,因为a是指针常量
A行运算结束后p指向a数组的下一行元素,即指向a[1]。a[1]是一个地址运算表达式,是“虚”的地址表示。所谓“虚”是指a[1]本身不占储存空间。请与下述第四点比较。
3.int *p[M]; p是指针数组,含有M个元素,每个元素都是整形指针。p指针的类型是int *[ ]。 4. int **p; p是指向整形指针的指针。p指针的类型是int **,与整形指针数组名的类型是int *[ ]等价。 例如:int *a[10],**p;p=a;p++; //正确,因为p是指针变量,A行a++; //错误,因为a是指针常量
A行运算结束后,p指向a数组的下一个元素,即指向a[1]。a[1]是具有储存空间的一个指针,是一个“实”的地址表示。所谓“实”是指a[1]本身占储存空间。
5. int (*p)(int,int); p是一个函数指针,可指向参数是两个整形量并且返回整形量的函数。从语法形式上卡,本节中第2点、第3点定义二维数组行指针和指针数组是,使用的军事方括号,只有在定义指向函数的指针时,使用的是圆括号。 6.int *f(){…} 与前面的1~5点不同,这是函数定义(函数体内部的语句被省略了),f是函数名,它返回整形指针,即发挥值类型为int *。本节前面1~5节定义了五种不同类型的指针变量,而本函数定义知识制定函数的返回值类型是指针类型的量,并没有引入新的指针类型,知识将第1点中国定义的最普通的指针作为函数的返回值。可以类推,如果有函数定义 int **f(){…},则表示函数的返回值类型为指向整形指针的指针。 7.void类型指针 此类指针比较特殊,在用法上要注意以下两点。 (1)任何类型的指针都已直接赋值给void类型的指针,无须进行强制类型转换。如:void *p1;int x,*p2=&x;p1=p2;
void类型指针也可以直接赋值给其他类型的指针,但最好进行强制类型转化,以明确表示指针的类型,例如:
p2=(int*) p1;
(2)不能对void指着进行算术运算。
8.空指针NULL C++将斧蛤常量NULL的值定义为0,通常用来表示一个空指针。例如:int *p=NULL; //表示用空指针NULL初始化指针变量pint m=0; //表示用整形常量0初始化整型变量m
C++规定,若一个指针值为NULL,他是空指针,不指向任何量。尽管NULL的值与0相同,但是两者的意义不同。假定指针变量为p,判断它是否为空指针的if语句可以使“if(p == NULL)”或“if(p!=NULL)”,强调p是指针变量。但不要写成“if(p==0)”或“if(p!=0)”,他们都影响程序的可读性,同理,也不要写成“if§”或“if(!p)”。
转载地址:http://mxowi.baihongyu.com/