指针

题单介绍

[指针](https://www.luogu.com.cn/blog/zwc/qian-tan-c-zhi-zhen) 指针: a[5]是数组a里的第5个变量。其中5是他的下标。我们一般用下标来找到一个变量在数组里的位置。 而内存,就可以看成一个很大的一维数组。里面每个变量所在的位置(下标)就被称作地址。 而记录这个地址的变量就被称作指针。 在c语言里面,我们可以用符号&来得到一个变量的地址。用符号*来得到一个地址里的值。 ``` int x;//定义一个变量 int *y;//定义一个int类型的指针变量,可以用来存储一个int类型变量的地址 y=&x;//得到x所在的地址,并存到y中 cout<<y;//输出x的地址 cout<<(*y);//输出指针y指向的地址里的值,即x ``` 试试下面这段代码 ``` int x=1; int *y,*z; y=z=&x; cout<<(*z)<<endl; (*y)=2; cout<<(*z)<<endl; ``` 由于上面这段代码中,y和z指向的都是x。所有只要改掉y指向的地址里面存的值,那么对应的x就会改变。z指向的值也就变了。 数组与指针: 在我们定义数组时,数组里的所有变量在内存里都是相邻的。 也就是说,定义数组int a[10];那么a[1]的地址其实就是a[0]的地址+4(因为一个int占4个字节)。 在c语言里,数组名字本身其实就相当于一个指针。 也就是说,a其实就是&a[0],a+1其实就是&a[1]。 指针也可以进行加减法(乘除也可以,但是没有太大意义)。 若指针y是指向int类型的指针,值为10。那么y+1的值就为14。若指针y是指向long long类型的指针,值为10。那么y+1的值就为18。char同理,应为11。 指向结构体的指针: ``` 定义结构体: struct node{ int x,y; }; node a; node *b=&a; 那么如果想要访问b指向的结构体里x的值,除了可以写成 (*b).x; 还可以更方便的写成 b->x; ```

题目列表