
指针的数组和数组的指针,指针作为一种变量类型,可以被声明为数组,而数组也是一种变量类型,也可以有指向它的指针,指针的数组是一种数组,而数组的指针是一种指针,来看下面一段代码
//指针的数组和数组的指
//作者:分解机226
#include
using namespace std;
int main()
{
int boli[5] = {0,1,2,3,4 };
int (*daijie)[5] = &boli;//数组的指针
int * bl[5] = { &boli[0],&boli[1],&boli[2],&boli[3] ,&boli[4] };//指针的数组
cout << "daijie:" << daijie << endl;
cout << "*daijie:" << *daijie << endl;
for (int i = 0; i < 5; i++)
{
cout << (*daijie)[i] << endl;
cout << bl[i] << endl;
cout << *(bl[i]) << endl;
}
}
运行结果
我们可以看到数组的指针和指针的数组语法区别在于:
数组的指针需要在星号和变量名外面加一个括号,而指针的数组却没有,因为声明数组的时候元素类型名int和数组的大小就是被变量名隔开的,在这里我们添加一个星号,并用括号括起来,表示这个指针int(*daijie)[5]就是指向整个数组,;如果不加括号,编译器就会将星号怜惜到前面的类型名int,所以bl就只是声明了一个数组,数组的元素类型时int*。
在声明bl的时候,我们把数组的地址赋值给他作为初值,由于数组的指针解引用以后就相当于数组,我们可以使用(*bl)[i]来读取数组元素的值。
bl是一个指针的数组,它的每一个元素都是一个指针,在这里我们就将数组每个元素的地址分别赋值,在遍历的时候,我们使用*(bl[i])来读取数组中的每一个值。
我们再来看下一段代码
//指针的数组和数组的指
//作者:分解机226
#include
using namespace std;
int main()
{
int boli[5] = {0,1,2,3,4 };
int (*daijie)[5] = &boli;
cout << "daijie:" << daijie << endl;
cout << "*daijie:" << *daijie << endl;
int boli2[5] = { 0,1,2,3,4 };
daijie = &boli2;
cout << "daijie:" << daijie << endl;
cout << "*daijie:" << *daijie << endl;
return 0;
}
运行结果
我们可以看到,数组的指针必须指向相同大小的数组,并且由于数组的指针指向是不可修改的数组,我们不能把*daijie作为左值修改。
指针的指针
//指针的指针
//作者:分解机226
#include
using namespace std;
int main()
{
int dj = 3;
int* boli2 = &dj;
int* *boli3 = &boli2;
cout << "dj:" << dj << endl;
cout << "*boli2:" << *boli2 << endl;
cout << "boli2:" << boli2 << endl;
cout << "*boli3:" << *boli3 << endl;
cout << "boli3:" << boli3<
运行结果
指针的指针看字面意识,就是指针指向的类型是指针类型,因此我们将boli2的地址赋值给他,但是指针的指针这种类型我们一般用的很少。大家可以简单的了解一下。
感谢阅读。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)