c语言初学者,哇!关于数组和指针的
c语言菜鸟,求救哇!~关于数组和指针的~
1\若有说明int a[5][4],(*p)[4];和赋值语句p=a;则下述对数组元素a[i][j]的输入语句中正确的是
A scanf("%d",*(a[0]+i)+j); B scanf("%d",*p[i]+j);
C scanf("%d",p[i][j]); D scanf("%d",p[i]+j);
2\若有说明int b[4][3]={3,5,7,9,2,8,4,1,6},*p[4];和赋值语句p[0]=b[0];p[1]=b[1];p[2]=b[2];p[3]=b[3];则下述对数组元素b[i][j]的输出语句中不正确的是()
A printf("%d\n",*(p[i]+j)); B printf("%d\n",(*(p+i))[j]);
C printf("%d\n",*(p+i)[j]; D printf("%d\n",P[i][j]);
我要崩溃了,好晕啊,哪位大虾能帮我理一下各选项代表的意思和正确答案是神马,小女子跪谢!555,~~~~(>_<)~~~~
------解决方案--------------------
写程序,运行
------解决方案--------------------
一眼看去题目好长。。欲关之。。。瞄到“小女子”。。。
1\若有说明int a[5][4],(*p)[4];和赋值语句p=a;则下述对数组元素a[i][j]的输入语句中正确的是
A。scanf("%d",*(a[0]+j);//错,同B B scanf("%d",*p[i]+j);//错。*p[i] + j是一个int类型,scanf要求指针。
C.scanf("%d",p[i][j]);//错,同B D scanf("%d",p[i]+j);//对, p[i]的类型是 int[4],可以转换为int*;
2\若有说明int b[4][3]={3,5,7,9,2,8,4,1,6},*p[4];和赋值语句p[0]=b[0];p[1]=b[1];p[2]=b[2];p[3]=b[3];则下述对数组元素b[i][j]的输出语句中不正确的是()
A printf("%d\n",*(p[i]+j)); //正确。B printf("%d\n",(*(p+i))[j]);//正确,p 可以转换成int**;
C printf("%d\n",*(p+i)[j];//错,[]优先级比*高,相当于**((p+i)+j) D printf("%d\n",P[i][j]);//正确
我要崩溃了,好晕啊,哪位大虾能帮我理一下各选项代表的意思和正确答案是神马,小女子跪谢!555,~~~~(>_<)~~~~
------解决方案--------------------
贴一个学习资料:
数组与指针
http://topic.****.net/u/20091123/11/0c03d2e2-0655-4634-8287-0e2315d889fc.html?91173
其实在C数组都是一维的..
前提: 一个具有数组类型的表达式可以转换成其第一个元素的右值指针。--(1)
int arr[3];
arr 是数组,根据(1)可以隐式转换成首元素的指针,这时元素类型是int,所以可以转换成int*
int* p = arr;//正确.
int*p = &arr[0];//与上面效果一样.
int arr2[3][2];
arr2 是数组名,根据(1)可以隐式转换成首元素的指针,这时元素类型是int [2];//元素是一维数组s.所以可以转换成int(*)[2];//指向数组的指针.
int (*p)[2]=arr2;//正确.
int (*p)[2] = &arr2[0];//与上面效果一样.
实际上,在C语言中,除了在sizeof(),和&操作之外,其他情况都会转换成指针.
你试试:
int arr[3];
sizeof(arr);
int * p = &arr;//错;
int (*P)[3] = &arr;//对
数组名绝不不是就是指针.二维数组名更不是就是二维指针,详见我上面的链接....
------解决方案--------------------
3楼基本上都在说一个事情;
数组可以转换成指针。
哪里不懂?
------解决方案--------------------
c,d啊
1\若有说明int a[5][4],(*p)[4];和赋值语句p=a;则下述对数组元素a[i][j]的输入语句中正确的是
A scanf("%d",*(a[0]+i)+j); B scanf("%d",*p[i]+j);
C scanf("%d",p[i][j]); D scanf("%d",p[i]+j);
2\若有说明int b[4][3]={3,5,7,9,2,8,4,1,6},*p[4];和赋值语句p[0]=b[0];p[1]=b[1];p[2]=b[2];p[3]=b[3];则下述对数组元素b[i][j]的输出语句中不正确的是()
A printf("%d\n",*(p[i]+j)); B printf("%d\n",(*(p+i))[j]);
C printf("%d\n",*(p+i)[j]; D printf("%d\n",P[i][j]);
我要崩溃了,好晕啊,哪位大虾能帮我理一下各选项代表的意思和正确答案是神马,小女子跪谢!555,~~~~(>_<)~~~~
------解决方案--------------------
写程序,运行
------解决方案--------------------
一眼看去题目好长。。欲关之。。。瞄到“小女子”。。。
1\若有说明int a[5][4],(*p)[4];和赋值语句p=a;则下述对数组元素a[i][j]的输入语句中正确的是
A。scanf("%d",*(a[0]+j);//错,同B B scanf("%d",*p[i]+j);//错。*p[i] + j是一个int类型,scanf要求指针。
C.scanf("%d",p[i][j]);//错,同B D scanf("%d",p[i]+j);//对, p[i]的类型是 int[4],可以转换为int*;
2\若有说明int b[4][3]={3,5,7,9,2,8,4,1,6},*p[4];和赋值语句p[0]=b[0];p[1]=b[1];p[2]=b[2];p[3]=b[3];则下述对数组元素b[i][j]的输出语句中不正确的是()
A printf("%d\n",*(p[i]+j)); //正确。B printf("%d\n",(*(p+i))[j]);//正确,p 可以转换成int**;
C printf("%d\n",*(p+i)[j];//错,[]优先级比*高,相当于**((p+i)+j) D printf("%d\n",P[i][j]);//正确
我要崩溃了,好晕啊,哪位大虾能帮我理一下各选项代表的意思和正确答案是神马,小女子跪谢!555,~~~~(>_<)~~~~
------解决方案--------------------
贴一个学习资料:
数组与指针
http://topic.****.net/u/20091123/11/0c03d2e2-0655-4634-8287-0e2315d889fc.html?91173
其实在C数组都是一维的..
前提: 一个具有数组类型的表达式可以转换成其第一个元素的右值指针。--(1)
int arr[3];
arr 是数组,根据(1)可以隐式转换成首元素的指针,这时元素类型是int,所以可以转换成int*
int* p = arr;//正确.
int*p = &arr[0];//与上面效果一样.
int arr2[3][2];
arr2 是数组名,根据(1)可以隐式转换成首元素的指针,这时元素类型是int [2];//元素是一维数组s.所以可以转换成int(*)[2];//指向数组的指针.
int (*p)[2]=arr2;//正确.
int (*p)[2] = &arr2[0];//与上面效果一样.
实际上,在C语言中,除了在sizeof(),和&操作之外,其他情况都会转换成指针.
你试试:
int arr[3];
sizeof(arr);
int * p = &arr;//错;
int (*P)[3] = &arr;//对
数组名绝不不是就是指针.二维数组名更不是就是二维指针,详见我上面的链接....
------解决方案--------------------
3楼基本上都在说一个事情;
数组可以转换成指针。
哪里不懂?
------解决方案--------------------
c,d啊