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;
 }

 不对的请指出,谢谢观看者。