美文网首页
关于指针的理解(一)

关于指针的理解(一)

作者: 爱学习的猫叔 | 来源:发表于2024-06-06 08:00 被阅读0次

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

    /*
     传入一个常量二级指针,指针指向的变量值无法修改,指针地址可以改
    */
    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();
    }
    

    相关文章

      网友评论

          本文标题:关于指针的理解(一)

          本文链接:https://www.haomeiwen.com/subject/dmcyqjtx.html