- 静态内存的用法:
- /*
- 静态变量是不能跨函数使用
- 取地址和我要指向你之前有什么区别
- int * p =88;
- 输出 :*p
- */
- #include <stdio.h>
- /*
- 你 保持的因为是**b类型的 ,但是我又要用到指针才可以保持 所有 int* **q
- 我如果我想更改一个值,我怎么样去修改呢? int *
- 程序是没有错误的!但是你用法错了.因为
- 虽然结果是对的.只不过逻辑上有问题。
- */
- void show(int* **q) //int *是我的指针类型 **q
- {
- int i = 55;
- // ***q = i; //我想输出它所指向的值,那么我们就这样写
- **q = &i;
- }
- int main(void)
- {
- int i = 5; //22FF74#
- int *a = &i;
- int **b = &a; //你其实这一个步骤取了我a本来的内存地址!
- **b = 100;
- show(&b);
- printf("%X#\n",&i);
- printf("%X#\n",a); //22FF74#
- printf("%X#\n",*b);//22FF70#
- printf("%d\n",i);
- printf("%d\n",*a);
- return 0;
- }
- 动态内存的用法:
- #include <stdio.h>
- #include <malloc.h>
- void show(int * ***q)
- {
- ***q = (int *) malloc(sizeof(int)); //动态内存.需要手动释放。
- // int b =88; // 静态的意见就被释放掉了.而到时候是不是没有了/。
- // ***q = &b;
- ****q = 99;
- return ;
- }
- int main(void)
- {
- int i = 10;
- int *a = &i;
- int **b = &a;
- int ***c = &b;
- printf("%X#\n",a);
- printf("%X#\n",**c);
- show(&c);
- printf("%d\n",i);
- free(**c);
- return 0;
- }
- 结构体:
- 为什么需要结构体
- 1.为了表示一些复杂的食物,而普通的基本类型往往不能满足要求
- 2.什么叫结构体
- 把一些基本数据类型结合在一起形成一个新的复合数据类型,这个就叫结构体
- 如何定义结构体
- 有三种方式,但是建议使用第一种
- /*
- 如何定义结构体.需要三种方式
- */
- #include <stdio.h>
- //第一种方式:
- struct Student
- {
- int age;
- double score;
- char sex;
- };
- int main(void)
- {
- struct Student st2 = {18,88.8,'F'};
- return 0;
- }
- 怎样使用结构体变量
- 赋值和初始化
- 定义的同时可以整体赋初值
- 如果定义完之后就只能单个的赋初始值
- #include <stdio.h>
- struct Student
- {
- int age ;
- double score;
- }; //注意就是一定要加分号
- int main(void)
- {
- struct Student xiaoxi = {19,88.8}; //这里的规格{, };
- printf("%d\n",xiaoxi.age);
- //我创建了一个Student 类型的 指针变量为meiyi
- struct Student *meiyi ;
- //meiyi 是指针变量 我获取了xiaoxi的地址
- meiyi = &xiaoxi;
- //等价于 (*meiyi).age 我们又知道(*meiyi 其实就是)xiaoxi 那么我们通过
- meiyi->age= 17;
- printf("%d\n",xiaoxi.age);
- return 0;
- }
转载于:https://blog.51cto.com/wangweihao/895782