在C语言中怎么样得到二维数组的首地址哦
//二维数组与指针.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#inclu...
// 二维数组与指针.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <stdio.h> void main() { int a[2][3]={11,15,19,21,25,29}; //定义一个数组 int *p,i,j,n=0; p=a; //将数组的首地址赋值给指针 printf(" 二维数组与指针\n\n"); printf("a=%d a[0]=%d\n",a,a[0]); //打印出数组a的首地址,和数组a的第一个数 printf("&a[0][0]=%d p=%d\n\n",&a[0][0],p); //打印出a[0][0]的地址,p指针的地址 printf("&a[1][0]=%d a[1]=%d a+1=%d\n",&a[1][0],&a[1][0],a+1); //得到指针a[1][0]的地址 和a+1的地址 printf("&a[0][1]=%d a[0]+1=%d p+1=%d\n\n",&a[0][1],a[0],p+1); //输出相应的地址 for(i=0;i<2;i++) { for(j=0;j<3;j++) //循环6次 { printf("a[%d][%d]=%d *(p+%d)=%d\n",i,j,a[i][j],n,*(p+n)); //分别打印出循环值和 变量的地址 n++; } printf("\n"); //换行 } } 这样会出错,,,但是写成p=a[]的时候又行,,,但是这个是一维数组的啊,,得到二维数组的首地址要怎么办啊
展开
3个回答
展开全部
就这道题来说,虽然编译器给出了对p=a的警告,但是程序仍然可以正确的运行。因为你的程序中并没有对p进行二次解引用。详细来说,执行p=a时,由于两者类型不同,编译器将a转换成指向整型的指针,然后复制给p,所以p可以正确地指向二维数组的首元素a[0][0]。 最后我再解释一下一些表达式的意思: a,a[0],&a[0][0],p均表示该二维数组的首地址。 &a[1][0],a[1],a+1,p+3均表示该二维数组中第二维的首地址。 a[0][1],a[0]+1,p+1均表示该二维数组中的第二个元素的地址。 p+n表示第n+1个元素。 理解上只要知道a[i][j]是元素,a[i]和p是指向整型的常指针,a是指向指向整型的常指针的常指针,也是数组的首地址就可以了。
展开全部
数组的首地址就是数组名称,二维数组也是一样,只是需要强制转型或用第一行首元素。
int a[5][5] = {0};
int* p = (int*)a;
或者:
int* q = a[0];//取第一行的首地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
指向二维数组的指针这样定义 int (*p)[3]; 然后就可以用p=a; 来访问了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询