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

关于指针的理解(一)

作者: 爱学习的猫叔 | 来源:发表于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();
}

相关文章

  • 关于指针数组与数组指针的理解

    上一篇介绍了指针和数组的区别和联系,相信很多同学都已经明白了指针和数组的用法,那么如果指针和数组混合起来,你还会用...

  • 二级指针

    关于二级指针,可以参考这篇文章[二级指针的作用详解] 所谓二级指针可以理解为:指向指针的指针函数通常会将参数拷贝一...

  • 关于指针传递和指针的指针

    一开始没有理解,导致对这个概念非常的模糊和不解。最近看完《 彻底搞定C语言指针详解》,里面关于指针的指针的解释有了...

  • lc25 关于链表

    复习知识点:1)链表反转2)关于指针。理解C++中指针传参,大概指针传参也是传的形参(like int数字),但是...

  • const理解

    关于const *和* const的理解,可以参考[C C++ OC指针常量和常量指针区别]这篇文章。 该篇文章中...

  • C语言入门之指针

    目的: 通过以下学习,希望能理解指针的概念,理解指针和数组的关系,理解指针的定义,掌握指针的用法。 1. 简述 用...

  • 指针的理解

    int *p是指向整型的指针 int * const p和int const * p都是指向整型常量指针,前者可以...

  • 指针的理解

    先看一个简单的例子: 输出结果如下: 所以,ip表示的是变量var的地址,*ip(前面加*)表示的取某个地址(例子...

  • 关于golang指针的理解与使用

    Go指针理解 Go 有指针,但是没有指针运算。你不能用指针变量遍历字符串的各个字节。在 Go 中调用函数的时候,得...

  • golang指针

    关于指针,我的理解是这样的,它指向一个内存的地址,也就是某个类型在内存中存放的地方。 定义一个指针 var d *...

网友评论

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

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