c/c++学习--------->数组
来源:互联网 发布:阿里云搭建微信公众号 编辑:程序博客网 时间:2024/04/30 16:01
一.数组
1. 数组名是一个常量,原因是在申请内存的时候就已经固定了,内存空间一旦固定,数组名就不能修改。
2. 数组首元素的地址和数组地址是两个不同的概念,例如:int a[200]={0}; a代表的是数组首元素的地址,&a代表的是数组地址, a+1跳向数组的下一个元素,步长为4;&a+1的步长是 ( sizeof(int) * 200)。
3. 数组首元素的地址和数组地址相同。
4.数组类型
typedef int (ArrayType)[5];
ArrayType myArray; <====> int myArray[5];
5.指针数组(数组里面存放的是指针)其实数组指针和指针数组看()和[]的优先级,()和[]优先级一样高,但是结合性从左到右,谁写在左边,谁的优先级高。
char *buf[] = {"aaaaa", "fdfsdf", "23432"}; //数组里面存放的指针(指针数组)
6.数组指针(数组指针用于指向一个数组)
typedef int (ArrayType)[5]; //第一种方法
ArrayType myArray;//相当于一级指针
ArrayType *pArray;
pArray = &myArray;//一级指针取地址赋值,pArray 是二级指针
(*pArray)[i] = i;//使用时先还原成一级指针 //指针指向一个数组(数组指针)
typedef int (*pArrayType)[5]; //第二种方法
pArrayType pArray;
int c[5];
pArray = &c;
int (*pMyArray)[5];//直接定义
int c[5];
pMyArray = &c;
7.多维数组本质
多维数组的本质就是数组指针(指向一维数组的指针),步长是往后跳一维的长度。
int a[3][5];
a 和 a+1 相差 ( 5*sizeof(int) )个字节,步长为 ( 5*sizeof(int) )个字节。
(a+i) 代表第i行的地址
*(a+i) 代表第i行首元素的地址
*(a+i) + j 代表第i行第j个元素的地址 <====> &a[i][j]
*(*(a+i) + j)代表第i行第j个元素的值 <====> a[i][j]
推演:a[i] ===> a[0+i] ===> *(a+i)
a[i][j] ===> a[0+i][j] ===> *(a+i)[j] ===> *(a+i)[0+j] ===> *(*(a+i) + j)
a就是指向第i行的地址。
8.多维数组做函数参数退化问题:
char a[30] ====> char *a; char *a[30] ====> char **a; char a[10][30] ====> char (*a)[30];
- [C学习]数组
- [C学习]数组
- [C学习]数组
- objective-c 学习 数组
- C语言数组学习
- C语言学习-数组
- C语言数组学习
- c/c++学习--------->数组
- C/C学习笔记/指针与数组
- [C学习]指针与数组
- [C学习]指针与数组
- [C学习]指针与数组
- [C学习]指针与数组
- [C学习]函数,指针,数组
- C语言学习笔记<数组>
- C语言学习之数组
- C++/CLI学习入门数组
- C语言学习笔记:数组
- centos7下源码编译配置 apache2.4+mysql5.6+php7.1
- 数独
- spring容器及bean加载机制源码解读
- 从 Spring Cloud 开始,聊聊微服务架构的实践之路
- bzoj2809dispatching 左偏树
- c/c++学习--------->数组
- RBAC 权限管理系统
- linux下杀死进程(kill)的N种方法
- Javascript作用域和变量提升
- java快速排序
- Jsp+Servlet+javaBean+Json+JQuery小知识集合
- 如何高效管理 React Native 项目中的图片资源
- java常用定时组件
- Cookie深度解析