C语言的指针种类
一、指针概念
指针:指针本身是一个变量,存储的是值得地址。
间接访问:通过一个指针访问它所指向的地址的过程,操作符 * 。
二、非法指针
int *a; *a = 12;
这段代码是错误的,由于a未被初始化,无法预测值12将存储的地方,若a指向非法地址,程序出错。
针对未初始化或释放不用的指针可以置NULL,在对指针进行间接访问前要确保初始化。
三、基本运算
char ch = 'a'; char *cp = &ch; char ch2 = *cp; // ch2位置赋值a ch2 = *cp + 1; // ch2赋值a+1 *(cp + 1) = 'b'; // ch后面位置赋b
指针也可以用关系运算符进行比较,如 ==、< 和 >。如果 p1 和 p2 指向两个相关的变量,比如同一个数组中的不同元素,则可对 p1 和 p2 进行大小比较。
四、指针常量
常量指针:一个指向常量的指针
指针常量:指针的常量,即不可改变地址的指针
char str1[] = { "Hello" }; char const *pStr1 = "World"; // 常量指针 char* const pStr2 = str1; pStr1 = str1; // pStr1指针指向可以修改,但指向的内容不能修改
辨别技巧:const放在指针操作符的左侧,则为常量指针。
五、数组指针
数组(的)指针:Array of pointers
指针的数组:A pointer to an array
int c[2] = { 0x8000000,0x00000000 }; int *a[2]; int(*b)[2] = &c; for (unsigned int i = 0; i < 2; i++) { a[i] = &(c[i]); } // 输出结果 cout << *(a[0]) << endl; cout << (*b)[1] << endl;
六、函数指针
函数指针:数据类型(*指针变量名)(参数表) ,形如int (*p)(int)
返回指针的函数:int* p(int)