指针与数组

数组名访问数组元素

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;
posted @   奔付山河  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示