关于指针的C语言题目

已知int i,x[3][4];,则不能将x[1][1]的值赋给变量i的语句是。
A)i=*(*(x+1)+1); B)i=x[1][1];
C)i=*(*(x+1)); D)i=*(x[1]+1);
看到别人解释说与x相对应的指针是 int (*p)[4]; 这是对的吗 请详细介绍题目

首先那个人解释的是对的. 类似于 int x[3][4] 这样的, 习惯于称之二维数组, 但这个声明实际上的含义是 声明了一个由3个元素组成的一维数组 x[3], 每一个元素的类型是由4个int类型组成的一维数组.也就是说声明了 x[0] x[1] x[2] 这3个一维数组, 每个一维数组都含有4个int类型.
A.数组名表示了数组的首地址, 也就是与数组第一个元素的地址相同, 对这个数组名进行 +1, 就是向后移动指向数组第二个元素. 所以 x + 1 指向的是 x[1] 这个元素. 因为 x[1] 这个元素本身也是一个一维数组, 所以其值 *(x +1)是那个一维数组的首地址, 对这个地址再进行+1操作的话,就是对x[1]指向的那4个int组成的数组首地址进行+1操作, 然后 *(x + 1) + 1 就指向了这个一维数组的第二个元素的地址, 再对其取值, * (*(x+1) + 1) 就取到的是 x[1][1].
B. 很直观。
C. x+1 是 x[1] 的地址, 对其取值 *(x+1) 就是 x[1]指向的一维数组的首地址, 所以对这个地址再取值,取到的就是 x[1][0]
D.同样 , x[1]是4个int组成的一维数组的首地址, +1取到这4个元素的第二个元素的地址, 再取值 *(x[1] +1) 即是x[1][1]的值.追问

int (*p)[4]与x[3][4]
请单独告诉我int(*p)[4]的概念 实在不懂它跟x[3][4]的联系

追答

像 int (*p)[4] 这种,首先 如同 int a int *pa 之类的, 都是声明. 而声明中只有那个未定义的标识符是变量名, 其余的部分都表示声明它的类型. 如 int a, 表示 a是一个int型变量. int *pa 表示 pa 是一个 int* 型变量. 同样 int (*p)[4] 表示 p 是一个 int (*)[4] 型的变量, 这个类型的含义从声明的变量名开始读, p 表示一个变量 ----> *p 表示 p是一个指针变量 ----> (*p)[4] 表示 每个指针指向一个包含4个元素的数组 ----> int (*p)[4] 就表示 这个指针指向的那包含4个元素的数组,数组中每个元素都是int型.
类似的, 像 int a[3][4][5] 表示的是由 a[0] a[1] a[2] 这3个元素构成的一个数组, 这个数组中每个元素都是一个 int (*)[4][5] 类型, 之所以a[3] 能被 (*) 替换, 也是数组名本身就表示了数组首元素的地址. 对数组名进行+1的移位, 都是移动一个数组元素大小, 针对 int a[3][4][5] , a+1 就从 a[0][0][0] 移动到了 a[1][0][0], 因为这个数组每个元素大小是 4 x 5 = 20 个int 类型的大小.

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-08-27
解释是对的!

*(*(x+1))是指的第二行的0元素!第一个元素 x[1][1]是指的第二行第二个元素!you know! you should know!
所以C错了本回答被提问者和网友采纳
第2个回答  2014-08-27
C,
A和C一样的格式,肯定有一个错,C表示a[1][0]追问

为什么C表示[1][0] 怎么看出来的
其他选项表达什么

追答

x数组首地址,x+1就算x[1]的地址,*(x+1)就是x[1][0]的首地址,再*就是它的值了
可以把x看成int[4] 类型的数组 x[3]

第3个回答  2014-08-27
你要是纯从做题角度判断 就是c啦,应为他就一个1,哈哈。要是从原理解释,楼上的dubainiwo已经把最基本的解释说了。
第4个回答  2014-08-27
答案 选 c
int (*p)[4] 他数一个数组指针追问

什么意思

追答

int (*p)[4] 是个数组指针 就是数组里面存放的是地址

int *p[4] 是个指针数组 是指向的数组

c语言指针选择题求解
1.选C。int a,*p;定义了一个整型变量a以及整型指针p;因此p=&a;p可以存放a的地址。2.选B。int a,*p=&a;因为a是一个变量,不存在*a这一个用法。3.选D。pp未定义错误。C是正确的,p1、p2以及p都是整型指针。4.a是整型变量,p是一级指针a的地址。q是二级指针p的地址。5.q指向null。所...

c语言:用指针输入两个数组|练习题
一、题目 利用指针输入两个数组 二、代码截图【带注释】三、源代码【带注释】使用指针实现数组输入功能 代码包含以下关键部分:1. 定义两个数组a和b,用于存储输入的数字。2. 通过指针pa和pb分别指向数组a和b的首元素。3. 输入第一组数组:使用for循环读取用户输入的5个整数,存储在数组a中。4. 输...

C语言 关于指针的选择 求教高手
①答案是为B ②*p1=*p2;的意思:【p1指向的地址的内存块的值为p2地址指向内存块上的值】③p1=p2;的意思:【p1指向的地址为p2指向的地址】④为了加深你对指针的理解,我们可以这么认为:p1是一张纸条,上面写着房间号,p2也是。p1=p2;是把p1纸条上的房间号擦掉,改成p2纸条上的房间号。p1=*p2...

C语言指针问题
一、如有定义char y[4]= "321"则表达式 *y+2的值是'5' 。分析:y是字符串数组首元素'3'的地址,*y的值就是字符'3',再加上2,就是字符'5'(也可以说是字符'5'的ASC码值)。二、 如有定义char z[2][4]={"MAT", "LAB"};,则表达式*(*z+2)的值是 'T'。分析:z是二维字符...

C语言关于指针的问题*++p与*(p--)
printf("%d ",*++p);\/\/++和*都是从右往左结合两者优先级一样所以和上句话一样*p=pa2]printf("%d ",*(p--));\/\/后-- 也就是先打印*p 在自减, 所以还是打印p[2] p -- p=p-1 *p=a[1]p+=3;p=p+3 所以 *p=a[4]printf("%d %d ",*p,*(a+3)); \/\/a+3 就是a...

关于c语言指针的一些问题
首先 你要告诉我 a 的类型 如果 a 是非指针型变量 那么 *p=a 是正确的 他表示 指针p 指向的单元 内容为 a (当然 如果a是数组名的 因为数组名也是指针型的 所以 就是错误的) 2,如果a 数组名 那么就是正确的 他表示 指针p 指向的单元 内容为 a [0] 3、a 是数组名的...

请高手帮我解决一下这道C语言题目,谢谢!
1、1234567 s1指针指向1,s2指针指向7 t=*s1++ s1指针指向2(t得到1的值 1)s1=*s2-- s2指针指向6(值发生改变1734567)s2=t; (值发生改变1734517)2、s1指针指向2,s2指针指向6 t=*s1++ s1指针指向3(t得到2的值 7)s1=*s2-- s2指针指向5(值发生改变1714517)s2=t; ...

c语言 指针选择题 164.题怎么做?
B选项。(p[1]+2)不能表示a[1][2]。p[0]指向a[0],同时也是指向a[0][0](a[0]与a[0][0]地址相同),p[1]指向的是a[0][1],p[1]+2是把指针再往后移动两次,依次指向a[0][2]和a[1][0],最终p指向的是a[1][0],故*(p[1]+2)代表a[1][0]的值。有什么问题请留言...

三道C语言题目,求大神(用指针的方法)。
=c)j++;return s;}int main(int argv,char *argc[]){char s[300],c;printf("Input a string: ");fgets(s,300,stdin);printf("Input a char: ");c=getchar();fflush(stdin);printf("After deleted,the string is: %s\\n",delchar(s,c));return 0;}运行样例:(3)include "stdio...

c语言,关于指针
不知道你是否有看清楚题意 (3)、指针加*,指向指针加**,假设有一个整形的指针变量为*p,那么如何再定一个变量指向*p呢,自然是int **pp;(4)、如果pp是指向指针的指针,也就是双重指针,那么p为指针,将指向指针的指针指向指针自然就是**pp=&p;(5)、双重指针取值和赋值,**pp就是取值...

相似回答