c++中如何用指针表示一二三维数组元素和元素地址值 c++中怎么通过指向二维数组的指针给二维数组赋值

作者&投稿:水官 (若有异议请与网页底部的电邮联系)
答非所问,楼上均是 Ctrl V党。指针指向地址,内存地址,也就是说指针就是地址。
1维数组: int a[3],a就是首元素的地址,也就是指针。所以元素可以表示成*(a+0),*(a+1),*(a+2);
元素地址值:a,a+1,a+2.
2维数组: int a[3][3],元素:a[0][0]=*(a[0]+0)=*(*(a+0)+0) ……a[i][j]=*(*(a+i)+j)
元素地址值:*(a+0)+0……*(a+i)+j;
3维数组:int a[3][3][3],在外面套一个*()就是了。*(*(*(a+0)+0) +0)……a[i][j][k]=*(*(*(a+i)+j)+k)
元素地址值:去掉*()就是了:*(*(a+i)+j)+k

int a[10]; int *b; b=a; 然后a[i]和b[i]是一样的
int a[10][8]; int (*b)[8]; b=a; 然后a[i][j]和b[i][j]是一样的,注意括号和中括号内的数,中括号内的数与第二位相同。如:int c[3][4]; int (*d)[4]; d=c;
int a[7][8][9]; int (*b)[8][9]; b=a; 然后就有a[i][j][k]和b[i][j][k]一致

指针必须有声明数据类型,指针里面的数都是地址,指向的地址里面存储数据,所以给指针赋值必须是地址才行,并且同类型的数据的地址赋值给同类型的指针。
就像分地,地有耕地、建筑用地、池塘等多种类对应char、int、double等数据类型,像char a;int a;float b[4]; 就像给你分定了某块地,地里有什么没有确定;但char a[]="abcdefg"; 则是分地时已经确定了,地里面是什么,但是地里面的东西可以改:a[2]=z; 分好的地里面的东西都可以修改的,原来没有确定什么东西的,但是耕地只能种菜建筑用地只能建房,像char里面的都当做字符,int里面的都当整形数。指针则像一个铭牌,定义一个指针就像给你一个铭牌,char *a;就定义了一个铭牌,但上面的内容没有初始化,也没有确定,里面的内容无意义;铭牌上可以写一个分好的地得地址,例如前面分地:char a[]="abcdefg"; 然后我们再给个铭牌 char *b=a; 这样b是个铭牌,上面写了a这块地得地址了,b就与a具有同样地效果了,但是b还可以改为指向别处的地址,但a却是定死的,不可更改位置,但a中的数据可以改。

int a[4][5],*p[4],i; //p表示指针数组
for( i=0;i<4;i++ )
p[i]=a[i];
/*有了这个定义后,指针数组p中的每一个指针分别指向了二维数组a每一行的首地址,以后通过p就可以访问a */
访问格式:p[i][j] , (*(p+i))[j] , *(*(p+i)+j) , *(p[i]+j) 都表是a[i][j]
eg: p[1][1]=1; //相当于a[1][1]=1;

C++ 关于使用指针提取三维数组元素的问题,下面程序哪里不对么?为什么输出的是地址?该怎么改?~

把这句 cout << *(p + ((i * N2 + j) * N3 + k)) << "" ;
改成 cout << *(***p + ((i * N2 + j) * N3 + k)) << "" ;

一、二维数组与二级指针
二维数组
二维数组本质上是以数组作为数组元素的数组,即“数组的数组”。二维数组的相当于由若干个一维数组组成的一级数组。
int a[3][4];
此时的a是一个二维数组,a[0]、a[1]、a[2]均表示一个一维数组,它们三个元素共同组成一个一维数组a(元素是一维数组)。也就是说二维数组a是由若干个一维数组元素(a[0]、a[1]、a[2])组成的一维数组。
int a[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}}设数组a的首地址为1000,各下标变量的首地址及其值如图所示。



无论是一维数组还是二维数组,数组名均表示数组的首地址。

2. 二级指针
指向指针的指针称为二级指针,即二级指针不是指向一个普通变量,而是指向一个指针。如int **p,*p并不表示一个变量的值,而是另一个指针。

二、二级指针指向二维数组
int a[3][4];
此时的a即是一个二级指针,*a指向二维数组的首地址(也是a[0]的首地址),*(a+1)指向a[1]的首地址,*(a+2)指向a[2]的首地址。*(*(a+0) + 1)表示元素a[0][1],*(*(a+i)+j)表示元素a[i][j]。

三、应用举例
#include void main(){int a[3][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}};for(int i=0; i<3; i++){for(int j=0; j<4; j++){printf("%4d", *(*(a + i) + j));}printf("
");}}
四、运行测试
0 1 2 3 4 5 6 7 8 9 10 11

怎么用结构体中的二维指针开辟动态二维数组
答:array[i]=(int* )malloc(n*sizeof(int));/*开辟n个int型数据空间并用一个指针array[i]指向该空间的首地址,这样就创建了一个m行n列的二维数组空间*/ } ...for(i=0;i<m;i++)free(array[i]);/*释放每个一级指针*/ free(array)/*释放最开始申请的二级指针*/ return 0;} 参考资料...

c语言中 二维数组要怎么输入?怎么换行啊?
答:scanf那行里的a[i][j]要写成&a[i][j],输入就正常的输入就行了,其实scanf读入数字的时候,数字可以用空格、回车或者TAB间隔,比如说一个2x2的数组,你输入 10 11 12 13 或者输入10 11 12 13都是可以的。

指针数组的创建和用法
答:(2)声明一个变长数组,声明时用变量表达式指定数组维数,然后用数组名来访问数组元素。(3)声明一个指针,调用malloc(),然后使用该指针来访问数组元素。malloc接受一个参数:所需内存字节数。然后malloc()找到可用内存中一个大小合适的块。内存是匿名的;也就是说,malloc()分配了内存,但没有为它...

C语言有没有3维或更高维数的数组?
答:有 从理论上讲,C支持多维(任意);但是:1、多维数组的存储量随着维数的增加呈指数增长,编译系统需要花费更多的时间计算数组下标,因此存取多维数组中的元素要比存取一维数组的元素花费更多的时间;2、另外使用多维数组再编程中更容易出错;所以大量的多维数组一般采取C语言动态分配函数及指针的方法,每次...

【求高手】不知道维数。如何分配二维数组形式数据的内存
答:但必须事先知道点数:PointCloud *p_pointdata=NULL; //定义一个指向点类型的指针p_pointdata=new PointCloud[point_num]; //根据点数分配内存【我现在需要实现的功能】:对于二维平面内的点集,对X坐标根据给定的单位区间长度划分出m个区间(也就是分成m个组);对于每个组中的点,按照...

C语言中关于指针问题
答:对于*w,它表示的是这个数组的第一行的首地址(是指向这个元素);而*w+1表示的自然就是第一行的首地址向后偏移一个int单元的地址,也就是说这时*w+1仅仅是一个指向一个int类型数据的指针(注意本例中*w是一个指针与w是一个指针的说法的区别,也就是一级指针与二级指针的区别),而非指向一...

如何定义一个指向数组的指针
答:(2)语句char *pArray[3];定义了三个元素的指针数组pArray,数组元素是指向char型变量或数组的指针变量。(3)语句pArray[0]=c1;将字符数组c1的首地址赋给pArray[0],指针变量pArray[0]指向了c1的首地址。(4)for循环中,语句printf("%s ", pArray[i]);依次打印了三个字符数组的内容。比如,p...

关于二维数组和一维指针数组的区别
答:说道一维指针数组,int* d[10], 本质上和int b[10]没有区别,b里边存了10个int值,而d里边存了10个int地址。地址也是值,只是我们通常不直接用这个地址,而是用这个地址指向的值。d中存了10个值,值的类型是地址,10个地址指向10个别的地方(也有可能相同,看开发的人怎么设置的)。如果我们用...

...生成动态数组来设计一个3X3矩阵转置函数,使用指针实现函数的功_百度...
答:j<n;j++){ m=*(*(p+i)+j);(*(p+i)+j)=*(*(p+j)+i);(*(p+j)+i)=m;} } void main(){ int **arr,i,n;cout<<"输入维数n:";cin>>n;create_arr(arr,n);cout<<"您输入的数组是:"<<endl;output(arr,n);zhuangzhi(arr,n);output(arr,n);delete []arr;} ...

关于C++ 中 new的用法的问题
答:"它产生一个指向数组第一个元素的指针", 这个好理解吧,就是说他返回的指针是指向数组中的第一个元素的.比如 int *p1 = new int[10];int (*p2)[10] = new int[2][10];p1是指向p1[0]的.p2是指向p2[0][0]的."返回的类型保持了除最左边维数外的所有维数"我理解它是在说"返回的类型...