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)

posted @ 2022-10-15 16:53  kuailest  阅读(93)  评论(0编辑  收藏  举报