锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

关于2维数组与指针的探究

时间:2024-04-28 18:37:10

问题引出:一个2维数组board[3][3] **(board+1)是指向哪个呢? 是board[1][0]还是board[0][1]?
答案是:
board[1][0];
我是这么理解 2维数组board[3][3] :一个2维数组里面有3个1维数组 ,每个1维数组中包含3个元素; 多维数组a[i][j][k]可以这么理解:a[i][j][k]表示一个3维数组有i个2维数组,每个2维数组中有j个1维数组,每个1维数组包含k个元素。



源头:
b o a rd, ** b o a rd+1)表示啥意思呢? board是数组board[0]的地址,而不是一个具体元素的地址。board+1相当于是地址加上一个一维数组长度(board+1相当于是 第0行数组首地址 加上一个一维数组长度的地址): 假如还是intboard[4][5],那么sizeof(board)=5*sizeof(int) 也就是说,board指向一个5int长度一维数组的头指针地址,那么board+1,则在地址上board=board+sizeof(int)*5。 哦,那就是board[1]的头指针地址了。所以 ** b o a rd+1)=board[1][0];

渐进:
*board = &board[0];”个人体会:这里的*borad是数组board[0]中的具体元素的地址,(*board+1相当于是第0行数组首地址加上一个具体元素地址)

具体事例:“int array[3][4];int*ptr = array; ”这个是不对的。
ptr和array有不同的级别,ptr指针引用的地址包含一个int类型的值,而array引用一个地址,那个地址引用另外一个包含int类型值的地址。arry比ptr多了一级。 那么,ptr需要一个*,以获取地址中的值,而arry需要2个*。 所以应该初始化:int *ptr=*arry;或者 int*ptr=&array[0][0];或者int*ptr=array[0]

附录:


-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章