指针与数组
数组名访问数组元素
a[i] 等价于 *(a + i)
数组名也是指针,但是是指针常量,指针操作赋值给普通指针
int i, *pa, a[] = {3,4,5,6,7,3,7,4,4,6};
pa = a;
a++;//不可以
pa++;//可以
int i, a[] = {3,4,5,6,7,3,7,4,4,6};
int *const pa = a; /* 注意 const 的位置:不是 const int *pa */
a++;//不可以
pa++;//不可以
const int *pi与int *const pi
int const i 等价于 const int i //前后一样i不可以被赋值
const int *pi = &i1;
pi = &i2; //注意这里,pi 可以在任意时候重新赋值一个新内存地址
*pi = i2;//不可以
// int *const pi 与 int const *pi不同,const 是写在 pi 前和*号后的,而不是写在*pi 前的
int *const pi = &i1;
pi = &i2; //不可以,pi是指针常量
const int * const pi=&i;//pi不能改,*pi也不能改
指针的指针
int *pi;
int **ppi;
ppi = &pi
静态数组
静态数组定义的时候需要确定纬度大小,使用常量表达式,如果不确定大小需要显式初始化
int i = 10;
int arr[i];//i不是常量表达式
int arr1[4] = { 1, 2, 3 };//长度为4,未初始化默认初始化,1230
int arr2[] = { 1, 2, 3 };//长度为3
int arr3[3] = { 1, 2, 3, 4 };//错误,长度3初始化4个元素
int arr4[] = { 'a', 'b', 'c' };//长度为4,字符数组最后一位为0
多维数组初始化
int a[3][4] = {
{0, 1, 2, 3} , /* 初始化索引号为 0 的行 */
{4, 5, 6, 7} , /* 初始化索引号为 1 的行 */
{8, 9, 10, 11} /* 初始化索引号为 2 的行 */
};
int (*p)[4] = a;
p = &a[1];
cout << *(*p) << endl;// 4
动态数组
int size = 10;
int* Dynamic_arr= new int[size];//未初始化,size不是常量表达式
int* Dynamic_arr= new int[size]();//默认初始化
int* Dynamic_arr= new int[size]{ 1, 2, 3, 4 };//初始化 *Dynamic_arr为1 *(Dynamic_arr + 4)为0
delete [] Dynamic_arr;//内存动态释放
多维动态数组的内存申请
int MAX_NUM = 10;
int ROW_NUM = 3;
int COL_NUM = 5;
int*** Arr_3D = new double **[MAX_NUM];
for(int i = 0;i < MAX_NUM;i++)
{
Arr_3D[i] = new double *[ROW_NUM];
for(int j = 0;i < ROW_NUM;j++)
{
Arr_3D[i][j] = new double [COL_NUM];
}
}
多维动态数组的内存释放
for(int i = 0;i < MAX_NUM;i++)
{
for(int j = 0;i < ROW_NUM;j++)
{
delete [] Arr_3D[i][j];
}
delete [] Arr_3D[i];
}
delete [] Arr_3D;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗