用下标法,指针法,行指针,列指针四种方法,编写程序,输出一个二维数组的元素。求解

用下标法,指针法,行指针,列指针四种方法,编写程序,输出一个二维数组的元素。求解,第1张

指针法其实就是行指针

#include <iostream>

using namespace std

void output_Subscript(int p[ ][4],int n)

void output_Line(int p[ ][4],int n)

void output_Column(int *p,int n)

int main()

{

 int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}

 cout<<"(1)下标法进行二维数组输出"<<endl

    output_Subscript(a,3)  

    cout<<"(2)行指针法进行二维数组输出"<<endl

    output_Line(a,3)

    cout<<"(3)列指针法进行二维数组输出"<<endl

    output_Column(a[0],12)   

    return 0

}

void output_Subscript(int p[ ][4],int n) 

{

   int i,j

   for(i=0i<ni++)

   { 

    for(j=0j<4j++)

   cout<<p[i][j]<<" "

    cout<<endl

   }

}

void output_Line(int p[ ][4],int n) 

{

   int i,j

   for(i=0i<ni++)

   {

    for(j=0j<4j++)

     cout<<*(*(p+i)+j)<<" "

    cout<<endl

   }

}

void output_Column(int *p,int n) 

{

   int i

   for(i=0i<ni++)

   {

    cout<<*(p+i)<<" "

    if((i+1)%4==0) 

     cout<<endl

   }

}

首先数组的访问有三种形式:1)下标法;2)首地址法;3)指针变量法。这里我们先分析首地址法。

假设有一个二维数组a[3][4],a就是首地址,他是一个指针是一个常量,指向第一个元素的地址,也就是指向第一行的首地址,是指首行一整行,并不是指某个具体元素。那么我们称之为“行指针”。同理:a+0,a+1,a+2,都是行指针如下表所示。

但我们发现光有行指针是不能对列元素进行访问的。所以我们再来看a[0],他也就是这个数组的首地址,也就是第一个元素的地址,只不过指针方向是指向列的方向。也就是a[0]+0。a[0]和a[0]+0都是指具体的元素,那么我们称之为“列指针”,如下表所示。

那么两个概念之间的具体转换是:

*行指针----列指针

&列指针----行指针

对应关系如下表所示

根据以上转换公式:

对于元素a[1][2],其地址用列指针表示为a[1]+2,等价表示为*(a+1)+2,那么内容是*(*(a+1)+2);

char arr[3]={'a','b','c'}

char (*ch)[3]=&arr

for(int i=0i<3i++){

    printf("%c ",ch[0][i])

}

不过不建议这样的代码。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/5907592.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-07
下一篇 2023-03-07

发表评论

登录后才能评论

评论列表(0条)

保存