行指针和列指针-专题分析(转至汪老师的C语言)

指针与多维数组

(主要指二维数组)

int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};

 行指针和列指针-专题分析

换个角度看世界:

如首行一样,将首行视为一个元素,一个特殊的元素,这个“特殊的”元素是一个一维数组。那么这个二维数组是由是由三个“特殊的”元素组成的一个“特殊的”一维数组。

a是这个“特殊的”一维数组的名称,也就是首地址,也就是第一个元素的地址,也就是第一行的首地址,是指首行一整行,并不是指某个具体元素。那么我们称之为“行指针”。同理:a+0,a+1,a+2,都是行指针。

 

结论:

表示形式

含义

指针类型

a或者a+0

指向第0

行指针

a+1

指向第1

行指针

a+2

指向第2

行指针

 

接下来,我们来放大观看首行,首行的元素分别是:a[0][0],a[0][1],a[0][2],a[0][3]。将其看作一个独立的一维数组,那么 a[0]就是这个数组的名称,也就是这个数组的首地址,也就是第一个元素的地址,也就是a[0]+0。a[0]和a[0]+0都是指具体的元素,那么我们称之为“列指针”。

 

结论:(第0行视为一维数组)

表示形式

含义

指针类型

a[0]

是一维数组的名称,也是它的首地址,而且是第1个元素的地址(a[0]+0

列指针

a[0]+1

0行,第2个元素的地址

列指针

a[0]+2

0行,第3个元素的地址

列指针

 

两个重要概念:行指针和列指针。

行指针:指的是一整行,不指向具体元素。

列指针:指的是一行中某个具体元素。

可以将列指针理解为行指针的具体元素,行指针理解为列指针的地址。

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

*行指针----列指针

&列指针----行指针

 

根据以上转换公式:

行指针

转换成:列指针

列指针等价表示

内容

内容等价表示

含义

aa+0

*a

a[0]

*a[0]

*(*a)

a[0][0]

a+1

*(a+1)

a[1]

*a[1]

*(*(a+1))

a[1][0]

a+2

*(a+2)

a[2]

*a[2]

*(*(a+2))

a[2][0]

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

 

 

列指针

行指针

等价表示

含义

a[0]

&a[0]

&a&(a+0)

0

a[1]

&a[1]

&(a+1)

1

a[2]

&a[2]

&(a+2)

2

示例1:用列指针输出二维数组。

#include <stdio.h>

void main()

{

   int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};

   int *p= a[0];   // 列指针的定义法

 

   for(; p < a[0] + 12; p++)

   {

     printf("%d ",*p);

   }

  

    return;

}

示例2:用行指针输出整个二维数组。

#include <stdio.h>

 

void main()

{

   int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};

   int (*p)[4]= &a[0]; // 行指针定义法或者int (*p)[4]= a;

   int i, j;

 

   for(i = 0; i < 3; i++)

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

   {

     printf("%d ",*(*(p + i) + j));

   }

  

    return;

}

  • 73
    点赞
  • 211
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
C语言中,指针指针通常用于处理二维数组或矩阵数据结构。它们可以用于遍历或操作这些数据结构中的元素。 **指针**:指针是指向二维数组中某一指针。通过指针,我们可以访问或操作该的所有元素。例如,如果我们有一个3x3的二维数组,我们可以使用一个指向该数组第一指针来访问所有的元素。 下面是一个简单的示例代码: ```c #include <stdio.h> int main() { int arr = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; int (*row_ptr) = arr; // 指针 // 使用指针访问数组元素 for(int i = 0; i < 3; i++) { for(int j = 0; j < 3; j++) { printf("%d ", row_ptr[i][j]); } printf("\n"); // 每结束换 } return 0; } ``` 在这个例子中,我们创建了一个指向3x3数组的指针。通过指针,我们可以遍历整个数组,访问和修改数组中的元素。 **指针**:指针是指向二维数组中某一指针。使用指针,我们可以直接访问某一的所有元素,而无需手动逐遍历。这与指针相似,但是面向的对象不同。例如,如果我们有一个3x3的数组,我们可以通过指针访问该数组的第三(从0开始计数)。 下面是一个简单的示例代码: ```c #include <stdio.h> int main() { int arr = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; int (*col_ptr)[3] = arr; // 指针指向第三 // 使用指针访问数组元素 for(int i = 0; i < 3; i++) { // 由于指针指向第三,因此我们只需要访问一 printf("%d ", col_ptr[i]); // 直接访问中的元素 } return 0; } ``` 在这个例子中,我们创建了一个指向第三指针。通过指针,我们可以直接访问该的所有元素,而无需手动遍历整个数组。 总的来说,指针指针在处理二维数组时非常有用,它们允许我们更高效地访问和操作这些数据结构中的元素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值