c/c++ (疑1)数组和指针

来源:互联网 发布:少年手指虎淘宝 编辑:程序博客网 时间:2024/06/06 03:21

指针:

很多人 都知道 指针是保存变量的地址,有时候想想还是挺迷惑的。

数组:

数组名实际就是一个地址,指向数组的首地址。


疑问1 那么我如何使用指针来操作数组呢?

int main(){int arr[3]={3,5,9};int *ptr1[3] = {nullptr};int (*ptr2)[3] = &arr;//ok*ptr1 = &arr[0];//ok//*ptr1 = &arr//errorfor(int i=0; i<3;i++){cout<<(*ptr2)[i]<<endl;//okcout<<ptr2[i]<<endl;cout<<(*ptr1)[i]<<endl;//okcout<<ptr1[i]<<endl;}//printf("%d", sizeof(short));system("pause");return 0;}


如果还有疑问:

那么,数组指针 ,指针数组 看看下面的说明。

int *arry[10];       //指针数组int (*arryp)[10];    //数组指针,因为数组指针指向数组,而数组也可看做是个指针,那数组指针可以理解为一个二 级指针int a[10];             arryp = &a;          //将数组地址个数组指针 arry[0] = *arryp;    //arry[0]是一级指针,要将数组指针赋给指针数组,就要取内容,实际就是 arry[0] = a;

提示:数组分配是连续的地址,所以

*ptr1 = &arr[0];//ok
也可以连续取出值。

二级指针:

指针也是一个对象,对象就有自己的地址,那么指针也可以赋值给指针地址。

int  p1 = 100, *p2 = &p1 ;int **p3 = &p2;cout<<p1<<endl;cout<<*p2<<endl;cout<<**p3<<endl;

关系图如下:


p3--------------------------->p2----------------------------->p1(100)


引用:

引用本身自己不是一个对象,那么就不存在地址,那么也不存在指向引用的指针。

也说明了,存在指向指针的引用。


2 0