typedef 类型重定义
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
typedef unsigned int x_int;
//u_int 就是 int的别名
int main()
{
x_int num2 = 100;
printf("%d\n", num2);
return 0;
}
static - 静态的
//1.static修饰局部变量 : 改变了局部变量的生命周期(本质上改变了变量的存储类型)
void test()
{
static int x = 1;
x++;
printf("%d", x);
}
int main()
{
int a = 0;
while (a <10)
{
test();
a++;
}
return 0;
}
//2.static修饰全局变量:extern 声明外部符号 使得这个全局变量只能在自己所在的源文件内部可以使用,其他源文件不能使用
全局变量,在其他源文件内部可以被使用,是因为全局变量具有外部链接属性
但是被static修饰之后,就变成了内部链接属性,其他源文件就不能链接这个静态的全局变量
//3.static修饰函数:使得函数只能在自己所在的源文件内部使用,不能在其他源文件内部使用
本质上:static是将函数的外部链接属性!(和static修饰全局变量一样)
存储类型:
栈区:局部变量 函数的参数
堆区:动态内存分配的!!
静态区:全局变量 和 static修饰的静态变量
define定义常量和宏
define 是一个预处理指令
1.define定义符号
#difine MAX = 1000
#define MAX 10000
int main()
{
printf("%d\n", MAX);
return 0;
}
define定义宏
#define Add(x,y) x + y
int main()
{
printf("%d", Add(123,543));
return 0;
}
指针:
指弹 就是 地址
32位 --- 32跟地址线 --物理线 --通电 --1/0
64位 --- 64跟地址线 --物理线 --通电 --1/0
电信号转换成数字信息:1和0组成的二进制序列
char - 1 byte = 8 bit 8个地址 C语言最小单位char
32位:4,294,967,296 bit位/8 = 536,870,912 byte/1024 = 524,288 KB/1024 = 512MB
最终:一个内存单元是一个字节 ,然后分配地址
int main()
{
int a = 10;
printf("%p\n", &a);// %p 专门用来打印地址
int * pa = &a;//拿第一个地址 pa是用来存放地址的,在C语言中pa叫是指针变量
//*说明 pa是指针变量 int说明 pa执行的对象是int类型的
char ch = 'C';
char* pp = &ch;
return 0;
}
int main()
{
int a = 10;
int* pc = &a;
*pc = 20;//解引用操作 *pa就是通过pa里边的地址,找到a
printf("%d\n", a);
return 0;
}
指针的大小是相同的
指弹是用来存放地址的
指针需要多大空间,取决于地址的存储有多大空间
32位 32bit - 4byte
64位 64bit - 8byte
int main()
{
printf("%d\n", sizeof(short*));
printf("%d\n", sizeof(long*));
printf("%d\n", sizeof( long long*));
printf("%d\n", sizeof(char*));
printf("%d\n", sizeof(int*));
printf("%d\n", sizeof(double*));
printf("%d\n", sizeof(float*));
//输出后 全是8个字节 因为是64位 32位则是4个字节
return 0;
}
结构体:
可以让C语言创建型的类型出来
struct student
{
char name[20];//成员变量
double chengji;
int age;
};
int main()
{
//3个打印方法
struct student s = { "xgy",90,20 };//结构体的创建和初始化
printf("1:%s %lf %d\n", s.name, s.chengji, s.age);//结构体变量.成员变量
struct student * ps = &s;
printf("2:%s %lf %d\n ", (*ps).name,(*ps).chengji,(*ps).age);
printf("3:%s %lf %d\n", ps->name, ps->chengji, ps->age);//结构体的指针->成员变量名
return 0;
}