关于指针的理解(一)

一级指针和二级指针的简单理解

/*
 传入一个常量二级指针,指针指向的变量值无法修改,指针地址可以改
*/
void fun(const char** str) {
    *str = "Android";
    //此时解引用输出的是一级指针的地址值,但此时该地址值被赋值成常量"Android"的地址
    printf("fun addr=%d\n",*str);//853191864
}

void print(char** strs,int len) {
    int i;
    for (int i = 0; i < len; i++)
    {
        printf("%s\n",*(strs+i));
    }
}

void main() {
    const char* name = "HelloWorld";
    const char** temp = &name;
    //比较二级指针&name与temp的地址
    printf("main addr1=%d\n",&name);//-2031093112
    printf("main addr2=%d\n",temp);//-2031093112
    //修改一级指针的地址值
    fun(&name);
    //打印一级指针修改后的地址值
    printf("main name=%d\n", name);//853191864
    //在C语言中,%s格式说明符用于打印字符串,它会打印从指定位置开始直到遇到字符串结束符\0为止的所有字符。
    //因此,当你使用printf("main name1=%s\n", name);时,它会打印整个字符串"HelloWorld",而不仅仅是第一个字符'H'。
    printf("main name1=%s\n", name);//Android
    printf("main name2=%d\n", "Android");//853191864
    //如果你只想打印第一个字符
    printf("main name3=%c\n", name[0]);//A
    //遍历字符串
    int index;
    for (index = 0; index < strlen(name); index++)
    {
        //char c = name[index];
        char c = *(name+index);
        printf("%c\n",c);
    }

    const int num = 100;

    const int* numP = &num;
    printf("numP=%d\n", *numP);
    //常量指针无法修改指针指向的值
    //*numP = 200;
    int num2 = 300;
    //但可以修改指针地址
    numP = &num2;
    printf("numP=%d\n",*numP);

    //指针常量无法修改指针地址
    int* const numQ = &num2;
    printf("numQ=%d\n", *numQ);
    //但可以修改指针指向的值
    *numQ = 400;
    printf("numQ=%d\n", *numQ);
    printf("num2=%d\n", num2);
    
    //双常量,就是指针地址和指针地址所指向的值都不能改
    const int* const numR = &num2;
    printf("numR=%d\n",*numR);


    /*二维数组*/
    int len = 3;
    char** params =(char**)malloc(sizeof(char*)*len);
    int i;
    for (i = 0; i < len; i++)
    {
        params[i] = (char*)malloc(sizeof(char) * 100);
        sprintf(params[i],"i=%d",i);
    }

    print(params, len);

    for (i = 0; i < len; i++)
    {
        if (params[i]!=NULL)
        {
            free(params[i]);
            params[i] = NULL;
        }
    }

    if (params != NULL)
    {
        free(params);
        params = NULL;
    }

    getchar();
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 首先,this指针只存在于函数(function)中。用于指向一个对象 this在不同函数中有3种代表方式: 普通...
    Leson17阅读 502评论 0赞 0
  • 上一篇介绍了指针和数组的区别和联系,相信很多同学都已经明白了指针和数组的用法,那么如果指针和数组混合起来,你还会用...
    GLGeek阅读 2,338评论 0赞 6
  • C语言指针p,p,*p以及&p在内存中的关系 结构体(struct)的使用 - Tom不是猫的文章 - 知乎 我对...
    岁月流逝之波涌新秀阅读 546评论 0赞 0
  • 前言 最近真的是忙的不可开交,公司一直给安排任务,连学习和写笔记的时间都没有了,落下好几次课的笔记都没有写,所以我...
    Xiho丶阅读 1,661评论 1赞 12
  • 先来讲一下本人学指针的经历:大一的时候刚接触c语言对指针这东西真的是太迷了,感觉麻烦难懂不想其他语言一样。但是搞懂...
    许_ac50阅读 380评论 0赞 0

友情链接更多精彩内容