题目要求
若有以下的定义:
int a[]={1,2,3,4,5,6,7,8,9,10}, *p=a;
则值为3的表达式是( )。
(A)p+=2, *(p++) (B)p+=2,*++p (C)p+=3, *p++ (D)p+=2,++*p
思路分析
引出一个数组元素,可以用:
下标法:如a[i]形式,a[2]=3
指针法:*(a+i)或者*(p+i) *(p++)和*(++p)作用不相同,*(p++)是先取*p的值,然后使p+1,*(++p)是p+1,然后在取*p,如果p的初值为a(即&a[0],a[0]=1),*(p++)得到a[0]的值,而*(++p)得到a[1]的值
举个例子
A选项中的表达式转化为代码
#include<stdio.h> int main() { int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; p+=2; printf("*(p++)=%d\n",*(p++)); return 0; }
结果,A选项没问题
B选项
#include<stdio.h> int main() { int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; p+=2; printf("*++p=%d\n",*++p); return 0; }
结果,不等于3
C选项
#include<stdio.h> int main() { int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; p+=3; printf("*p++=%d\n",*p++); return 0; }
结果 不等于3
D选项
#include<stdio.h> int main() { int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; p+=2; printf("++*p=%d\n",++*p); return 0; }
结果不等于3