基本概念
- 使用数组时,编译器一般会把它转换为指针
- 很多使用到数组名的地方,编译器会自动将数组名替换为一个指向数组首元素的指针
- 通常定义的数组为size_t类型,被定义在stddef.h或cstddf中
- size_t是一种与机器无关的无符号类型,设计的足够大,以便表示内存中任意足够大的对象
- 数组、vector、string均可执行下标运算
- 标准库类型限定使用的下标必须是无符号类型,内置的下标运算无此要求
- 数组内存空间连续,链表不连续
- 数组能更好地利用CPU的cache(预读、局部性原理)
- 数组只需要存储数据,链表还要存储指针域,数组的内存使用效率更高
定义不同类型的数组
int (*p)[10];
typedef int (*ptr)[10];
-
int (&ref)[10];
-
int* (&ref)[10];
-
int* p[10]
-
-
-
int (*p)[10]=&arr;
-
int (*p)(int);
-
int (*p[5](int));
-
-
int (**p)(int);
-
定义数组
#define M 3
#define N 4
void test()
{
int** p = (int**)malloc(sizeof(int*) * M);
assert(p != NULL);
for (int i = 0; i < N; ++i)
{
p[i] = (int*)malloc(sizeof(int) * N);
assert(p[i] != NULL);
}
}
数组作函数参数
- 二维数组作为参数传递给函数时,为什么不能省略列信息
arr[i][j]=base+i*col*sizeof(dataType)+j*sizeof(dataType);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律