1. 首页 > 科技

char*p <=>a[] 那么p=a[0] (p+1)=a[1]?(int a[]={2,4,6,8},*p=a,i; for(i=0;i<4;i++)

char*p <=>a[] 那么p=a[0] (p+1)=a[1]?(int a[]={2,4,6,8},*p=a,i; for(i=0;i<4;i++) a[i]=*p++; printf("%d %d %d %d\n",a[0],a[1],a[2],a[3]);)

int a[]={2,4,6,8},*p=a,i; for(i=0;i<4;i++) a[i]=*p++; printf("%d %d %d %d\n",a[0],a[1],a[2],a[3]);

<pre t="code" l="bash">选择 B

int a[][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

相当于<pre t="code" l="cpp">int a[][4] = {

{1, 2, 3, 4},

{5, 6, 7, 8},

{9, 10, 0, 0}

};而<pre t="code" l="cpp">int * p = *(a + 1);表明 p 此时指向 5所以要想输出9, p 需要 += 4;剩下就是 * 和 ++ 优先级的问题了.===============<pre t="code" l="cpp">* 和 ++具有相同的优先级

* 和 ++ 具有 右结合的特性

所以 *p++ 就相当于 *(p++)

但是.. . 尤其注意, 后置的 ++ 返回的还是当前的值, 然后整个表达式 求值完之后 才 += 1

所以 B 是正确 答案

对于C, ++p, p此时指向10, 然后 *p, 结果会是数组中的10(此处是数组中的10)

对于D, ++*p, 首先*p 结果是9, 再++, 输出10 (此时的10 只是 9 + 1, 而不是数组中的10)

若有定义 int a[6]={1,2,5,20,30,40},*p=a;则*(p 3)的值为

a+0指向1,a+1指向2,a+2指向3,*p=a+2;那么p指向3,p[2]就是p+2指向的数据 p+0指向3,p+1指向4,p+2指向5,所以p[2]的值是5

*p=a,a[p-a]是什么意思

*p=a;a[p-a]就是a[0],经一次p++;以后a[p-a]就是a[1],照此类推。

所以,a[p-a]就是*p。

char *p=a为什么不是char *p ;*p=a;

*和char共同组成一个类型。

所以等同

char *p ;p=a;