常见的关键字:
- c语言提供的,不能自己创建关键字
- 关键字不能做变量名(变量名不能和关键字冲突)
- auto是自动变量,每个局部变量都是auto修饰的。*
break,case,char,const,continue,default,do,double,else,enum,extern,float,for循环语句,goto,if,int,long,register,return,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile,while
int main()
{
{
int a = 10; //自动创建,自动销毁-自动变量
//auto int a=10; 但auto省略了,故直接int
}
}
signed 有符号的(有正负号的)
unsigned 无符号的
static 静态的:
1.修饰局部变量,改变了局部变量的生命周期(本质上是改变了变量的存储类型)
2.修饰全局变量,使得这个全局变量只能在自己所在的源文件(.c)内部可以使用,其他源文件不能使用。全局变量,在其他源文件内部可以被使用,是因为全局变量具有外部链接属性,但是被static修饰后就变成了内部链接属性,其他源文件就不能链接到这个静态的全局变量了。eg:例子1
3.修饰函数,使得函数只能在自己所在的源文件内部使用,不能在其他源文件内部使用。本质上讲,static是将函数的外部链接属性变成了内部链接属性。(和static修饰全局变量一样)eg:例子2
typedef 类型定义
union 联合体、共用体
关键字:
typedef unsigned int u_int;
int main()
{
unsigned int num = 100;
u_int num2 = 100;
return 0;
}
eg:static例子1:
void test()
{
int a = 1; //a是局部变量,出了局部范围就会销毁
a++; //static int a=1 加了static之后,修饰局部变量,改变了局部变量的生命周期(本质上是改变了变量的存储类型)
printf("%d ", a);
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
eg:
static例子2:
在相同文件中创建两个源文件01和02。分别写入以下代码:
int Add(int x, int y)
{
return x + y;
}
extern int Add(int x, int y);
int main()
{
int a = 10;
int b = 20;
int sum = Add(a, b);
printf("sum=%d\n", sum);
return 0;
}
第二个代码中的extern声明外部函数,而将extern改为static后,就会无法解析外部符号。
//c语言中,void是空的意思,代表函数类型是无返回类型,免用return语句
栈区:局部变量函数的参数
堆区:动态内存分配的
静态区:全局变量static修饰的静态变量
//define是一个预处理指令
- define定义符号,常量
#define MAX 1000
int main()
{
printf("%d\n", MAX);
return 0;
}
2. define定义宏
#define Add(X,Y) ((X)+(Y)) //宏是有参数的
int main()
{
printf("%d\n", 4 * Add(2, 3));
return 0;
}
指针:
#include
int main()
{
int a = 10; //a在内存中是要分配空间的--4个字节
printf("%p\n", &a); //%p是专门用来打印地址的
int * pa=&a; //pa是用来存放地址的,在c语言中pa叫指针变量
//* 说明pa是指针变量; int说明pa执行的对象是int类型的
return 0;
}
例子2:
int main()
{
char ch='w';
printf("%p\n", &ch);
char * pc = &ch;
return 0;
}
int main()
{
int a = 10;
int* pa = &a;
*pa = 20; //*解引用 *** 作;*pa就是通过pa里边的地址,找到a,修改a
printf("%d\n", a);
return 0;
}
指针的大小是相同的,指针是用来取地址的,指针需要多大空间,取决于地址的存储需要多大空间
32位 32bit—4byte
64位 64bit—8byte
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)