首先还是总结一下static的用法:
1:修饰全局变量,改变变量的作用域,只能在当前文件夹被调用,其它文件不能调用。
2:修饰函数;改变函数作用域,只能在当前文件中被调用。
3:修饰局部变量,改变变量的生命周期,直到程序才释放
(函数调用最后释放栈空间,被static修饰的局部变量,存放在数据段)---静态数据区
再总结一下预处理和宏定义:
预处理:#include"stdio.h":在当前目录和TC指定目录中找个文件
#include <stdio.h>:在由TC指定的文件目录zhon中找该文件
define 宏名 【宏体】 (没有类型)
1.定义常量
#define a 3
2 定义函数
#define OUT printf("hello\n"); //无参宏函数
#define p(s) printf("%s\n",s); //有参宏函数
#define SQR x*x
int main()
{
OUT; p("abcdefg");
int a=1,b=2;
printf("%d",SQR(a+b));//此例中,1+2*1+2=5
return 0;
}
********************************************************下面是指针啦
指针:用来保存地址,是变量的一种,所有类型指针长度都是4(因为只要是地址就是32位)
int *p=&a //定义,P是指针,用来保存a的地址
*p=100; //通过地址来访问内存,访问连续的4个字节(把100写到内存里)
*有两个含义:
定义的时候:表示后面的变量是一个指针;
使用的时候:表示取值 *p=100;
【错误示范】:int *p
*p=&a //这个时候*p代表取值,而地址zhi'只能用指针来保存
【正确示范】: int *p=&a
或 p=&a
char *p=&a //p指向a
p+1 //加一个字节,指针指向下一个单元
int *q = &b;
q+1 //加四个字节,指针zhi指向下一个单元
地址传递实例(交换)
#include<stdio.h>
void swap(int *x,int *y)
{
int tmp=*x;
*x=*y;
*y=tmp;
}
int main()
{
int a=1,b=2;
swap(&a,&b);
prinf("a=%d,b=%d\n",a,b);
return 0;
}
*px=&x;
(*px)++:x的内容加1及*px的值加1
*px++ //先取*px的值,再加1
++ *px //先加去,再取px值。
指针指针与NULL比较
#define NULL 0
int *p=NULL //空指针
int *p; //野指针(指向一段不能使用的内存)