day05
谁能横刀立马,唯我飞牛大将军!
下面是day05所学到的知识:
涵盖知识点:
关键字static
#define定义常量和宏函数
指针初步
结构体初步
1.关键字static
三种用法:
修饰局部变量——静态局部变量
修饰全局变量——静态全局变量
修饰函数——静态函数
(1)先讨论static修饰局部变量
<1>当没修饰时:
<2>当修饰时:
总结:static修饰局部变量时,改变了变量的生命周期,让静态局部变量的作用域依然存在,到程序结束,生命周期才结束。需要知道一点的是,该局部变量的作用域没有改变。
(2)再讨论static修饰全局变量
思路:此时我定义了两个在同一目录下的两个.c源文件,目的是为了验证全局变量支不支持跨文件访问,并且验证全局变量在被static修饰之后会发生怎样的变化。
<1>当没修饰时
<2>当修饰时
总结:首先,全局变量支持跨文件访问。其次,一个全局变量被static修饰,使得该全局变量只能在本源文件中使用,不能被其他源文件使用。
(3)最后讨论static修饰函数
<1>当没修饰时
<2>当修饰时
总结:首先,函数访问支持跨文件。其次,一个函数被static修饰,使得该函数只能在本源文件中使用,不能在其他源文件中使用。
2.#define 定义常量和宏
(1)简单地文本替换
#define MAX 100
(2)“宏函数”
3.指针初步
(1)内存:存储器,计算机中所有程序的运行都是在内存中进行的。
为了有效的使用内存,就把内存划分成了一个个小的内存单元,每个内存单元的大小为1个字节。
为了能够有效的访问内存中的每一个单元,就给内存单元进行编号,这些编号被称为内存单元的地址。
定义变量,全部都是在内存中定义或开辟的。
(2)鼠标双击的时候,就是把exe程序加载到内存中。
(3)编址是硬件电路自动完成的。
如何取地址?
#include <stdio.h>
#include <windows.h>
int main()
{
int num = 10;
printf("%p\n",&num);
system("pause");
return 0;
}
如何存储地址?
int num = 10;
int *p ;
p = #
实例:
#include<stdio.h>
int main{
int num = 10;
int *p = #
*p = 20;
printf("%d\n",num);
return 0;
}
几点说明:
1.指针就是地址。
2.指针变量是变量,里面存放地址。
3.指针变量里面放的是指针,这种说法可以的。
4.对指针解引用,代表的是指针所指向的变量。
推广到其他类型:
#include<stdio.h>
int main{
char p = 'a';
char*q = &p;
*q = 'b';
printf("%c\n",p);
return 0;
}
指针变量的大小
结论:指针大小在32位平台是4个字节,在64位平台是8个字节
4.结构体初步
(1)结构体使得C语言具有描述复杂类型的能力。
(2)例如:
struct Stu
{
char name[20];
int age;
char sex[5];
char id[15];
}
(3)结构体的初始化
struct Stu s = {"张三",20,"男","20180202"};//打印结构体信息
printf("name = %s age = %d sex = %s
id = %s",s.name,s.age,s.sex,s.id);//.为结构成员访问操作符
struct Stu *ps = &s;
printf("name = %s age = %d sex = %s
id = %s",ps->name,ps->age,ps->sex,ps->id);//->操作符