題目要求
若有以下的定義:
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