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++)
更新时间:2021-08-19 11:09:54 • 作者:JESSICA •阅读 4867
- 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[6]={1,2,5,20,30,40},*p=a;则*(p 3)的值为
- *p=a,a[p-a]是什么意思
- char *p=a为什么不是char *p ;*p=a;
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;