C语言中二维数组和指针
来源:互联网 发布:花椒直播mac版 编辑:程序博客网 时间:2024/05/11 15:18
C语言中二维数组和指针
二维数组的地址表示方式
如数组:int a[3][3] = {1,3,5,7,9,11,13,15,17};
等价于:int a[3][3] = {{1,3,5},{7,9,11},{13,15,17}}
注意:
每一行都对应一个行地址,二维数组的地址就是第一行地址
二维数组名字本来就是地址即:
行地址:
a是第一行地址
a+1是第二行地址
a+2是第三行地址
列地址:
a[0]+0第一列地址
a[0]+1第二列的地址
a[0]+2第三列的地址
具体项目地址如:
a[1][2]的地址:为以下三种表示方式
1. a[1]+2;
2. *(a+1)+2
3. &a[1][2]
a[1][2]里面的值:为一下三种表示方式
4. *(a[1]+2)
5. ((a+1)+2)
6. a[1][2]
a[]或(a+1)//行地址a[]+i //行地址加列地址
Test代码如下所示:
#include<stdio.h>int main(void){ int nums[3][3] = {1,3,5,7,9,11,13,15,17}; /**第一行地址*/ printf("%p,%p,%p,%p\n",nums,nums[0],*nums,&nums[0]); /*第二行地址*/ printf("%p,%p,%p,%p\n",nums+1,nums[1],*(nums+1),&nums[1]); /*a[2][1]的值*/ printf("%d,%d,%d,%d\n",*(nums[2]+1),nums[2][1],*(*(nums+2)+1),*(&nums[2][1])); /*第一行第一列的值*/ printf("%d,%d\n",*(*nums),**nums); return 0;}
&和*连用的时候是可以整体进行省略的 &在二维数组中的含义是:地址升阶 即&(第一列地址)--------->会将地址升阶成行地址 *运算符在二维数组中的另外一种含义就是:地址降阶 如:a+1代表第二行地址(行地址) *(a+1)代表的是(第二行第一列的地址)(列地址) *(a+1)+2代表第二行第三列地址,** 其顺序是由(某一行地址--->某一行地址第一列地址---->某一行地址到具体列数的地址) 即 行地址加指针指针运算符拿到的是列地址,列地址再加指针运算符拿到的是某一行某一列地址中的值;**列地址加上一个取地址运算符&,就变成了行地址%p是地址输出printf("%p\n",a[1]+2);行地址也可以称为行指针列地址也可以称为列指针注意:二维数组中每一行的行地址和每一行第一列地址是一样的,但是其含义是完全不一样的,一个是行地址,没有进行降阶处理,而列地址是
二维数组的指针遍历方式:
1:下表发去遍历二维数组
2;列地址去遍历:
根据二维数组在内存中按行去连续分配内存空间的,所以可以通过列指针去遍历二维数组;
对于二维数组来说; *a就是第一行第一列的地址*(a+0)+0;
代码能够run,如果有需要的话,可以直接拉下来run一下,看看结构体数组是怎么进行初始化操作和使用的。谢谢大家的访问,如有写的不好的地方,希望大家能够及时的提出来,谢谢观看
1 0
- C语言中二维数组和指针
- C语言指针、二维数组和指针
- C 语言中二维数组指针详解
- C 语言二维数组和双重指针
- 二维数组和指针(C语言
- c语言 指针和二维数组
- 二维数组和指针(C语言)
- 二维数组和指针(C语言)
- 二维数组和指针(C语言)
- c语言二维数组和指针详解
- 二维数组和指针(C语言)
- 二维数组和指针(C语言)
- 二维数组和指针(C语言)
- C语言指针和二维数组
- C语言中二维数组、二维指针、指向指针的数组、指向数组的指针
- C语言二维数组指针
- c语言中指针,二维数组,一维数组,指针数组,二级指针,应用
- C语言中有关二维数组的指针问题
- SSH框架之Struts的数据校验(1)
- MVC,MVP 和 MVVM 模式如何选择?
- 1064. 朋友数(20)
- 基于L0范数平滑的图像漫画特效生成算法
- 用Spark和DBSCAN对地理定位数据进行聚类
- C语言中二维数组和指针
- APP数据备份
- storm集成kafka
- 日请求从百万到八亿的技术历程
- JDBC案例演示,供参考
- Linux基础-文件权限管理
- 在STM32上创建一个自己的操作系统
- 1029_魔咒词典
- Docker基本操作