关于C语言指针的问题
132以下程序执行后a的值是
main()
{ int a,k=4,m=6,*p1=&k,*p2=&m;
a=p1==&m;
printf( "%d\n ",a); /*为什么a=0? */
}
255若有以下的说明和语句:
main()
{int t[3][2], *pt[3],k;
for(k=0; k <3;k++) pt[k]=t[k];
}
则以一选项中能正确表示t数组元素地址的表达式是
A) &t[3][2] B) *pt[0] C) *(pt+1) D) &pt[2]
为什么 是答案C) *(pt+1)呢?
[解决办法]
main()
{ int a,k=4,m=6,*p1=&k,*p2=&m;
a=p1==&m;
printf( "%d\n ",a); /*为什么a=0? */-----你的上面一句中==优先级高于=,所以。。。
}
main()
{int t[3][2], *pt[3],k;
for(k=0; k <3;k++) pt[k]=t[k];
}
则以一选项中能正确表示t数组元素地址的表达式是
A) &t[3][2] B) *pt[0] C) *(pt+1) D) &pt[2]
为什么 是答案C) *(pt+1)呢?
----------------------看老tan的书就可以明白的
[解决办法]
main()
{ int a,k=4,m=6,*p1=&k,*p2=&m;
a=p1==&m;
printf( "%d\n ",a); /*为什么a=0? */ /*上一句语句可以写成这样a=(p1==&m);由于==优先级高于=,所以它先判断了(p1==&m)是否成立.在题中它不成立,则a=0.*/
}
255若有以下的说明和语句:
main()
{int t[3][2], *pt[3],k;
for(k=0; k <3;k++) pt[k]=t[k];
}
则以一选项中能正确表示t数组元素地址的表达式是
A) &t[3][2] B) *pt[0] C) *(pt+1) D) &pt[2]
为什么 是答案C) *(pt+1)呢?
/*在数据基本类型声明中,定义了一个指针数组,其中将二元数组t中每一行作为一个新的一员数组b[3](其中b[0]包含了两个元素,即t[0][0]和t[0][1],b[1]包含了两个元素,即t[1][0]和t[1][1],b[2]包含了两个元素,即t[2][0]和t[2][1]).而pt[0]存储的是第一行的地址,即:int *pt[0]=&b[0].所以选择了c答案.
[解决办法]
a=p1==&m;
相当于a=0,因为p1!=&m.
楼主一定想选B吧?答案是因为*的优先级高.