指针

作者: 活最好的自己 | 来源:发表于2019-02-21 12:00 被阅读1次

    一, 数组名 == 指针变量

    如下代码的输出结果, 是数组 a 的第一个元素

    - (void)testArray{
        int a[3]={1,2,3};
        int *num[3];
        int **p,i;
        for(i=0;i<3;i++)
            num[i]=&a[i];
        p=num;
        printf("%p---%p",p,num);// 0x7ffee5800930---0x7ffee5800930
        printf("%d",**p);
    }
    

    分析如下:

    1. int *num[3] 可以看成 (int *) num[3], 存放了三个整型地址的数组, 数组的每个元素都存放的是地址, 这个地址指向的内存中的数据, 要按照整型数据来读取.
    2. p=numnum 中存放的内容赋值到 p 的内存中, 即将指针p 的指向和数组的首地址 num的指向一样, 即数组中第一个元素的地址, (*p)就等价于* num, 也就是 num[0], 而 num[0] 又被赋值为a[0]的地址, 则*(* p)就是 a[0]的内容了.
      (PS:char *name = (char *)malloc(sizeof(char)*10)可以把这段代码中的 name 理解成数组的指针, 指向数组开始的地方...只是这里是动态开辟内存, 数组是静态开辟内存.)
    3. p 是一个指针, 不管是几级指针, 变量的内存空间始终是一个字, 和计算机的位数有关, 也就是计算机的寻址范围.
    4. 使用 %p 打印的是指针变量p中存放的地址内容, 而不是p的内存地址,p 的内存地址可以用&p打印出来.
    5. num[4] 相当于 *(num+4), 要清醒 num+4 只是一个指针.

    相关文章

      网友评论

          本文标题:指针

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