• 徐洲更
    2020-01-22
    看完本文后还可以看下「C和指针」的第6章和第10章,可以加深对指针和结构体的理解。
    关于本次题目,解题步骤如下
    1. a 是一个数组,每个元素都是一个结构
    2. p是一个指向结构体的指针,存放了数组a的首地址
    3. 对于&a[1].x,运算符优先级为[] > , > &, 即下标引用大于访问结构成员大于求地址
    4. 根据第3条里的运算规则,运算会得到是数组a中第二个结构x的地址
    综上,对应答案和解释如下
    - p+1: p是a[0]的地址,p+1是a[1]的地址,同时a[1]的第一个元素是x,p+1也就是a[1].x的地址
    - &(*(p+1)).x: 先用*取值得到a[1],然后获取地址
    - &(p+1)->x: *+.的操作可以用 ->代替
    - &p[1]: 可以把p当作a来操作
    - &p[1].x

    代码我放在GitHub上: https://github.com/xuzhougeng/learn-c-in-JKSJ/blob/master/jksj-07-pointer-1-c

    这里再提一个问题,指针的指针一般在什么情况下用
    展开

    作者回复: 思考的很不错。要说指针的指针应用场景,一般就是用来替代二维数组的。可其本质和二维数组还有所不同。此外,你可以把指向指针类型的指针,这句话,看成是,指向某个类型的指针,而这某个类型,就是指针类型,所以你这个问题,本质上也是在问指针有啥用。从这个角度,自行思考一下,就明白了。

     1
     3
  • 王建
    2020-01-21
    想到的方法
    printf("%p\n", &a[1].x);
    printf("%p\n", a+1);
    printf("%p\n", (int*)a+2);
    printf("%p\n", (double*)a+1);
    printf("%p\n", (char*)a+8);
    展开

    作者回复: 都对!d(^_^o)

    
     2
  • 信念
    2020-02-08
    #include <stdio.h>

    int main(){
      struct point p;
      sizeof(p);
      sizeof(struct point);
      printf("%zu",sizeof);
    return 0;
    }
    请问一下怎么用printf输出sizeof的值呀?查了资料还是不太会
    展开

    作者回复: printf("%d",sizeof(struct point));

     1
    
  • 一步
    2020-01-21
    声明指针变量的时候 int *p = &a , 的执行顺序顺序为&a取出a的地址,然后把地址=赋给变量p,最后用*取出变量p的对应的值。这能说明运算符号的优先级为: & > = > *?

    作者回复: 在定义指针变量p的时候,*只是用来说明p是一个指针变量,而不是取值运算,这一点要注意。另外,运算符的优先顺序,搜索C语言运算符优先级表。要学会看那个表。

    
    
我们在线,来聊聊吧