c语言处理指针、数组、运算符等说明、运用

1.指针的考察
void main(void)
{
    int a[5] = {1, 2, 3, 4, 5};
    int *ptr =  (int *)(&a + 1); // &a取址后以a[0-4]整个数组为步进,a以a[0]也就是int为步进
    printf("%d %d" , *(a + 1), *(ptr - 1));
}
这段程序的输出是: (a) 2 2 (b) 2 1 (c) 2 5  (d) 以上均不是
答案:c
权重:较高
备注:需要知道数组取址后的涵义,因为实际中会用到
    之所以写成void main(void){} 而不写成main(){} 是要告诉别人你就是要用void,而不是你写代码时遗漏了

a的类型是一个整型数组,它有5个成员
&a的类型是一个整型数组的指针
所以&a + 1指向的地方等同于 a[6]

所以*(a+1) 等同于a[1]
ptr等同 a[6], ptr-1就等同与a[5]

(2)void main(void) 
{
    int a[][3] = {1, 2, 3, 4, 5, 6};
    int (*ptr)[3] = a;  // 指针数组ptr为123,ptr+1为456,ptr+2为非法的不确定
    printf("%d %d ", (*ptr)[1], (*ptr)[2]);
    ++ptr;
    printf("%d %d", (*ptr)[1], (*ptr)[2]);
}  
这段程序的输出是:   2 3 5 6 
备注:指针和数组都是嵌入式中用得非常多的

ptr是一个数组的指针,该数组有3个int成员

2.逗号操作符

c=a,b; / *yields c=a* /
d=(a,b); /* d =b */

考查逗号表达式,逗号表达式的优先级是很低的,比赋值(=)的优先级低. 逗号表达式的值就是最后一个元素的值
逗号表达式的还有一个作用就是分割函数的参数列表..

E1, E2, ..., En
上面这个表示式的左右是,E1, E2,... En的值被分别计算出来,En计算出来的结构赋给整个逗号表达式 

你可能感兴趣的:(Linux下嵌入式C语言开发)