1结构体
1.只有结构体变量才分配地址,定义是不需要的。
2.用sizeof关键字求结构体长度时,返回的最大基本类型所占字节的整数倍。所以说结构体的大小一定是里面最大的整数倍数。
2指针
在了解指针前,先要理解地址和数据,你可以想象有很多盒子,每个盒子有对应的号码,那个号码叫做“地址”,而盒子里放的东西叫做“数据”。
1.指针是一种保存变量地址的变量。
2.用指针有个好处就是可以轻易共享内存数据,使得程序更加高效。
3.int *p和int **p的区别:int *p表示地址所对应的数据是一个int类型的值,int **p表示的就是p地址里面的数据其实还是一个int类型的指针地址,所以访问
值的时候,前者是*p,后者是**p。
前者就是给你一把钥匙你就去找箱子,后者就是给你一把钥匙你去找钥匙再去找箱子。
4.p++和(*p)++,一个加地址,一个加数据。
这里提一嘴*p,p,&p的区别,*p很简单就是指向地址的数据,p就是指向的地址,&p的话,你首先的了解其实p本身也是个变量,但是只是它是指针变量而
已,是变量你就有地址和数据这两个信息,数据用来存它所指向的变量的地址,所以&p就是表示它的地址。
3数组
1.数组的名就是数组的地址,数组的一个元素的地址也是数组的地址,比如arr,和&arr[0].
2.多维数组的本质其实就是一维数组在定义一个数组,只是逻辑上把它看成多维而已,类似于队列那儿看成环形队列。
3.函数返回数组,可以用指针函数返回。(首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有"函数返回值)。
#include<stdio.h> int *funtion() { static int arr[3];//C不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。 for(int i=0;i<3;i++) { arr[i]=i+3; } return arr; } int main() { int *p; p=funtion(); for(int i=0;i<3;i++) { printf("%d",*(p+i)); } return 0; }
不对的请指出,谢谢观看者。