读书人

一路C的题目

发布时间: 2013-07-04 11:45:40 作者: rapoo

一道C的题目
int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}
int (*ptr)[3]=a,*p=a[0];
则下列能正确表达数组元素a[1][2]的表达式的是
A*(*ptr+1)[2]) B*(*(p+5)) C(*ptr+1)+2 D*(*(a+1)+2
[解决办法]
这里面ptr是指向具有三个int元素的指针,所以ptr + 1 = (int *)ptr + 3,p是整形指针,所以p + 1是移动一个整形的位置,那么a[1][2]在内存中相当于a + 1 * 3 + 2也就是a + 5,所以正确的答案应该是 *(p + 5)或者 *((int *)(ptr + 1) + 2)
[解决办法]
结果是D(少个括号另说)。
还有另其他结果:


#include <stdio.h>

int main(int argc, char *argv[])
{
int a[4][3] = {
{1,2,3},
{4,5,6},
{7,8,9},
{10,11,12}
};
int (*ptr)[3], *p;
ptr = a;
p = a[0];

printf("a[%d][%d] = %d\n", 1, 2, a[1][2]);
printf("a[%d][%d] = %d\n", 1, 2, *(*(a+1)+2));
printf("a[%d][%d] = %d\n", 1, 2, *(p + 1*3 + 2));
printf("a[%d][%d] = %d\n", 1, 2, *(*(ptr+1)+2));
return 0;
}

作为一种参考吧。

读书人网 >C语言

热点推荐