网站建设评分,做网页初学者教程,wordpress大学主题,网络团队指针数组和指向数组的指针
int *p[4]和int (*p)[4]有何区别#xff1f; 前者是一个指针数组#xff0c;数组大小为4#xff0c;每一个元素都是一个指向int的指针 后者是指向int[4]类型数组的指针 以上代码若运行会报如下错误 main函数中定义的a数组本质是一个指向int[2]的…指针数组和指向数组的指针
int *p[4]和int (*p)[4]有何区别 前者是一个指针数组数组大小为4每一个元素都是一个指向int的指针 后者是指向int[4]类型数组的指针 以上代码若运行会报如下错误 main函数中定义的a数组本质是一个指向int[2]的指针而函数形参则是一个指针数组即形参的a是一个二维指针所以会报错类型不匹配 若将形参改为int (*a)[2]则编译通过
数组中a和a的区别
假如a是一个一维数组输出a和a发现结果相同都是一维数组首元素的地址但两者虽然值相同却是不同的 这段代码是没问题的但若将第二行的a改为a则会报错 即编译器认为a是int类型的而a则是int ()[4]类型的用大白话讲就是a编译器可以认出a是一个数组a则不行
#include stdio.h
int main()
{int a[5] { 1,2,3,4,5 };int *ptr (int *)(a 1);printf(%d,%d, *(a 1), *(ptr - 1));/*getchar是用VS编写方便查看输出*/getchar();return 0;
}请思考一下上面的输出结果如果你非常自信了可以不用往下看 这个题目主要考察a 和 a
a 在这里代表是的数组首元素的地址即 a[0]的首地址其值为 0x005efda0。a 代表的是数组的首地址其值为 0x005efda0。a1 的值是 0x005efda01*sizeofint等于 0x005efda4。a1 的值是0x005efda0 sizeofa 5*sizeof(int) 0x005efdb4 {0xcccccccc, 0xcb626a90, 0x005efdd0, 0x0029200e, 0x00000001}
二级指针 指向指针的指针 //一些常用的头文件
#includestdio.h
#includeiostream
using namespace std;/*
通过引用直接去修改数组里的元素
小技巧函数写在主函数main前面就不用写函数声明了
*/
void SetArray(int row,int col,int** Array){//是引用符号得到的是指针地址
//二维指针需要通过一维指针去指向数组Array new int*[row]; //开辟行空间for(int i 0;i row;i){Array[i] new int[col]; //开辟列空间for(int j 0;j col;j){Array[i][j] 0;//初始化也可以将其他数组或是值存进去}}
}
//打印数组里的内容
void PrintArray(int** Array,int row,int col){for(int i 0;i row;i){for(int j 0;j col;j){cout Array[i][j] ;}cout endl;}
}
//内存释放开辟的数组空间用完必须要手动释放不然会爆内存
void DeleteArray(int** Array,int row){
for(int i 0;i row;i){delete[] Array[i];}delete Array;
}
int main(){int** Array NULL;int row col 3;SetArray(row,col,Array);PrintArray( Array,row,col);DeleteArray(Array,row);return 0;
}