c语言 二维指针,c语言 二维指针变量是什么

kodinid 6 0

大家好,今天小编关注到一个比较意思的话题,就是关于c语言 二维指针问题,于是小编就整理了4个相关介绍c语言 二维指针的解答,让我们一起看看吧。

  1. C语言行指针?
  2. 怎么用指针的指针,指向二维数组的每个元素?
  3. c语言中,行指针指向哪里,为什么(*p)[]方框里是二维数组的列不是行,他不是行指针吗?
  4. C语言二维数组如何交换两行或者两列?

C语言行指针?

先举个例子吧,先定义一个二维数组int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}} 数组名a就是一个行指针,a[0]就是一个列指针; 就拿这个例子说吧,a和a[0]虽然相同,可是指针指向类型不同,对指针进行+1运算,显然得到的结果是不同的,因此a(行指针)+1中的"1”代表一行中全部元素所占的字节数,而a[0]+1,这里的1则是一个元素所占的字节数,是两个不同的概念。为了说明这个容易搞混的问题,可以用军训中排队点名来说明。

班长逐个检查本班战士是否在队列中,班长每移动一步,走过一个战士,而排长点名只检查本排各各班是否到齐。

c语言 二维指针,c语言 二维指针变量是什么-第1张图片-安济编程网
图片来源网络,侵删)

排长只从第0班的起始位置走到第1个班的起始位置,看来只走了一步,但实际上他跳过了10个战士,这相当于a+1,班长面对的战士,排长面对的是班,班长相当对列指针,排长相当于行指针。

为了找到某个班内的某一个战士,必须给出两个参数

怎么用指针的指针,指向二维数组的每个元素?

  C语言的数组(不管多少维)在内存中都是线性储存的。所以用一级指针加偏移就可以访问所有元素。  举个例子,有一个10*10的二维数组a,这样就可以输出:int a[10][10];int *p = (int *)a;int i;for (i = 0; i < 10 * 10; i++)printf("%d", *(p + i));

c语言 二维指针,c语言 二维指针变量是什么-第2张图片-安济编程网
(图片来源网络,侵删)

c语言中,行指针指向哪里,为什么(*p)[]方框里是二维数组的列不是行,他不是行指针吗?

(*p)[X]只是说p是指向一个具有X列的数组的指针,指针的类型(就是这个一维数组的元素的类型)有待你声明,X的大小也要你写明确,否则p就不可用;p确实是行指针,是指向一行一维数组的,但一个一维数组的长度不是用列数来表示的吗?至于p指向了哪一行,那要由代码给它赋值了才能知道。

比如有int a[3][4],(*p)[4],p=a;,那么这时p就指向了第一行(第一下标为0的那一行),p+1就指向了第二行(第一下标为1),p+2就指向了第三行(第一下标为2)。若没有赋值(没有写p=a),那么p就只是一个能指向列数为4的(即数组长度为4)int型数组的指针,它这时还是野指针,没有具体指向!

C语言二维数组如何交换两行或者两列?

方法很多

1、可以直接找到数组对应行的元素,进行交换数据,改变原数组内容

c语言 二维指针,c语言 二维指针变量是什么-第3张图片-安济编程网
(图片来源网络,侵删)

2、可以定义指针数组指向每行的首地址,交换指针地址,按顺序打印每个指针为首的行数据,得到数据交换效果,原数组内容不变。我这里用第2种方法给你写了一个,你参考吧。#include <stdio.h>int main (){ int nArry[4][4]={{1,2,3,4},{2,3,4,5},{3,4,5,6},{4,5,6,7}}; int *p[4],i,j,*ps***e,index[2];//p[]分别指向每行首地址 printf("打印原数组:"); i=16; p[0]=&nArry[0][0]; while(i-->0) { if((i+1)%4==0) printf("\n"); printf("%d ",*(p[0])); p[0]++; } while(1) { printf("\n\n输入2个你要交换的行号:"); scanf("%d%d",&index[0],&index[1]); for(i=0;i<4;i++) { p[i]=&nArry[i][0]; } ps***e=p[index[0]-1]; p[index[0]-1]=p[index[1]-1]; p[index[1]-1]=ps***e; printf("第%d行和第%d行调换后的数组为:\n",index[0],index[1]); for(i=0;i<4;i++) //按顺序打印 首地址指针开头的行数字 { for(j=0;j<4;j++) { printf("%d ",*(p[i]+j)); } printf("\n"); } } return 0;}

到此,以上就是小编对于c语言 二维指针的问题就介绍到这了,希望介绍关于c语言 二维指针的4点解答对大家有用。

标签: 指针 数组 二维