指针与多维数组的那点事儿

最近笔试经常遇到这个p+1的问题,,还是《C++ Primer》说的明白:在C/C++中没有多维数组,只有元素是数组的数组。

  • 关于指针加1移动的距离:一个指针加一移动的距离是它指向的元素在内存中的大小。
  1. 所以指向int的指针加1走过了4个字节;
  2. 指向int[n]的指针加1走过了n*4个字节;
  3. 以此类推。
  • *p的类型是p所指向的元素的类型,所以*p+1是p所指向的素的类型加以之后的结果。
  • 数组名a是一个指针,这个指针是一个指向其元素类型的指针。
  • 对数组名取地址&a是一个指针,这个指针加1走过的距离是元素的个数乘以给个元素的大小。
[cpp] view plaincopyprint?
  1. template<typename T> 
  2. int f(T p) 
  3.     returnint(p+1)-int(p); 
  4. template<typename T> 
  5. int get(T p) 
  6.     return *((int*)(p+1)-1); 
  7. int main( void )  
  8.     int a[2][2][2]={{{1,2},{3,4}},{{5,6},{7,8}}}; 
  9.     int* p; 
  10.     int (*p1)[2]; 
  11.     int (*p2)[2][2]; 
  12.     p=a[0][0]; 
  13.     p1=a[0]; 
  14.     p2=a; 
  15.     print(f(p));//4  
  16.     print(f(p1));//4*2=8  
  17.     print(f(p2));//4*2*2=16  
  18.     print(f(*p));//1  
  19.     print(f(*p1));//4  
  20.     print(f(*p2));//4*2=8  
  21.     print(get(&a));//8=a[1][1][1]  
  22.     print(get(&a[0]));//4=a[0][1][1]  
  23.     print(get(&a[0][0]));//2=a[0][0][1]  
  24.     return 0; 

原文链接: https://www.cnblogs.com/wencangz/archive/2012/11/10/2764224.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    指针与多维数组的那点事儿

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/68862

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午1:31
下一篇 2023年2月9日 下午1:32

相关推荐