www.5213.net > 若有定义:int A[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},(*p)...

若有定义:int A[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},(*p)...

int (*p)[4];表明p是行指针,即p指向二维数组中的一行.p=a;这一句表示p指向a[0],也就是指向a数组第0行的第0个元素(a[0][0])的地址.p[2]表示p指向a数组的第二行,即指向a[2]行,也就指向a[2][0]的地址.p[2]+3表示行指针指向a数组的第二行(从第0行开始),(从0开始)第3个元素,也就是a[2][3],*(p[2]+3)表示第2行,第3个元素的值.p+4表示第四行(从0行开始),因为a数组没有第四行,所以是错的.p[4]表示第四行(从0行开始),原因同上.*p表示a数组第0行,第0列地址,**p表示a[0][0]的值,值不会再包含元素,所以(**p)[2]是错的.

若有定义:int a[]={1,2,3,4,5,6,7,8,9,10,11,12},*p[3],m;,阅读下面程序段,写出运行结果: for(m=0;m<3;m++) p[m]=&a[m*4]; printf(“%d\n“,p[2][2]); 程序运行结果:请问答案是多少,解释一下运行过程 谢谢!问题补充:谢谢各位的指教!

我来回答程序:#include <stdio.h>#include <stdlib.h>int main(void){ int a[3][4]={{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; int *p = &a[0][0]; for (int i = 0; i != 12; ++i) printf("%d ", *(p + i)); system("pause>nul"); return 0;}

这是个二维数组.int a【】【】第一个中括号表行数,从0开始;第二个代表列,也从0开始;数组初始化没有给出初值的数组元素被编译器自动赋值为0;int a[][3]={1,2,3,4,5,6,7,8,9,10}实际为:int a[][3]={1,2,3, 4,5,6, 7,8,9 ,10,0,0} 四行三列.

int a[3][4]={1,2,3,4,5,6,7,8,9};,相当于int a[3][4]={{1,2,3,4},{5,6,7,8},{9,0,0,0}}; 因此,a[1][3]=8, a[2][3]=0;

#includevoid main(){\x05int a[]={1,2,3,4,5,6,7,8,9,10,11,12};//对数组a初始化\x05int *p[3];//定义指针数组,每一个元素都是指针\x05int m;//定义变量mfor(m=0;m

设有以下定义:int a[4][3]={1,2,3,4,5,

A P+=2 , P=P+2 相当于a[2] ,*(p++)相当于*(p+2) 即a[2]*++p相当于*(++p)相当于a[3] p+=3 ,p=p+3 相当于a[3] *p++相当于*(p++)++*p相当于++(*p) 即++a[0] =2 不懂可以再追问

表达式sizeof(a)/(sizeof(int)*4)的值为3 sizeof(a)是a数组所占内在的字节数,int a[][4]={1,2,3,4,5,6,7,8,9,10,11} 等价于 int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,0}; 它是一个3行4列的int数组.sizeof(int)*4 是一个4个元素的int数组所占的字节数.所以,表达式sizeof(a)/(sizeof(int)*4)的值就是a数组的行数,值为3.

相关搜索:

网站地图

All rights reserved Powered by www.5213.net

copyright ©right 2010-2021。
www.5213.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com