结构体指针
分析以下程序结果:
#include <stdio.h>
2 struct ks
3 {
4 int a;
5 int *b;
6 } s[4], *p;
7
8 main()
9 {
10 int n = 1, j;
11 printf( "\n ");
12 for(j = 0; j < 4; j++)
13 {
14 s[j].a = n;
15 s[j].b = &s[j].a;
16 n = n + 2;
17 }
18 p = &s[0];
19 p++;
20 printf( "%d %d\n ", (++p)-> a,(p++)-> a);
21 }
开始认为输出为5 3, 但是输出结果为7 3, 这是为什么?
[解决办法]
同一个表达式中各个子表达式的计算顺序在标准中没有规定,依赖编译器的实现,所以同一个表达式中一定不要有两个和两个以上的子表达式修改同一个变量。
标准中只规定了逗号表达式和关系运算(&& ||)表达式的计算顺序。
[解决办法]
在有些系统里面printf( "%d %d\n ", (++p)-> a, (p++)-> a)
是从右往左计算的
也就是
先算(p++)-> a:取指针的值3, 然后指针加1
然后(++p)-> a:指针加1, 然后取指针的值, 当然就是7了