虽说C语言学了好多年了,但是还是很多东西没有真正搞清楚啊。 define|typedef|static|const|数组&指针|多维数组
一般形式为:#define 标识符 字符串
例如:#define PI 3.14
在编译预处理时会将PI进行替换,并且只是简单地字符串替换!
作用域是当前文件。
* 方便程序修改
* 提高程序运行效率
#define A a+b
...
int a=2,b=3;
int c=A*A; // >>> c=a+b*a+b,此时c=11,而不是25;
printf("%d",c);
...
所以有时候可以加个括号
#define A (a+b)
用来给类型起个新名字
一般形式: typedef *** newname;
example: typedef int INT;
typedef long long ll;
* 会对***进行编译,把***当做一个整体,然后起一个新名字
#define INT1 int*
typedef int* INT2;
...
INT1 p1,p2; // >>> int *p1,p2; //创建一个指针int型指针p1和int变量p2.
INT2 p3,p4; // >>> int *p3; int*p4; //创建两个int型指针变量
...
还可以用来定义机器无关的类型
你可以定义一个叫 REAL 的浮点类型,在目标机器上它可以获得最高的精度:
typedef long double REAL;
在不支持 long double 的机器上,该 typedef 看起来会是下面这样:
typedef double REAL;
并且,在连 double 都不支持的机器上,该 typedef 看起来会是这样:
typedef float REAL;
修饰局部变量时,称为静态变量。
可以提高局部变量的持久性(改变生存周期),函数调用结束时,该变量并不会释放,第二次调用函数时,值还是之前的。
会在静态数据区创建,初始值为0.
修饰函数,该函数的作用域为当前文件 & 不能修改任何非static对象。
修饰全局变量,限定作用域为当前文件。
不是常量,是一个只读变量
不能放在case关键字后面也说明const不是一个常量。
定义时赋值,之后不允许修改。
修饰普通变量
const int a;
a还是一个int型变量,const int 顺序可以互换:
int const a;
修饰数组
const int a[5];
int const a[5];
只读数组
修饰指针
const char *p;
char const *p;//这两种,const都是修饰*p,则p指向的变量只读。(与下一种对照记忆)
char * const p;//const很明显修饰指针p,则指针p不能被修改。
const char * const p;//指针p不能被修改,指向的对象也不能被修改。
还可以用在函数传值,增强程序健壮性
void apple(const char *a){//防止修改a指向的字符串
...
}
void apple(char * const a){//防止修改a本身
...
}
char *p="hello";//字符串是一个只读的常量
char a[]="hello";//此时初始化的数组可以修改。
C语言不能像一位数组那样,给函数传递一个多维数组。 只能再函数的形参处写明除第一下标之外的其他下标。
int function(int a[]);
int a[10];
function(a);
-----------------------------------
int function(int a[][3][4]);//需写明下标
int a[4][3][4];
function(a);
欢迎与我分享你的看法。 转载请注明出处:http://taowusheng.cn/