首先看两道道面试题:
变量的定义与声明有啥区别?
首先:变量的定义一定也是变量的初始化,反之则不成立, 在一定的作用域中,变量的声明可以有多个,但是定义只有一个;
-》变量在定义时分配内存空间,同时也可能赋予初值;
-》变量在声明时不会分配内存空间,说明该变量是存在的,指出了该变量的名字和位置。其作用是声明该变量是已在程序后面定义的变量
如: extern int i ; //声明外部变量;<=> extern i ;
如: int i ;//定义变量;
简要说明static的用法?
NO.1 修饰函数,使得函数成为静态函数,在此static并非指存储方式,只是说明该函数的作用域只是局限于本文件;
NO.2 修饰局部变量,成为静态局部变量,存储在静态区,即使函数运行结束,静态变量的值不会被销毁,下次调用该函数时,值仍存在;
NO.3 修饰全局变量,成为静态全局变量,存储在静态区,作用域仅限于变量被定义的文件中,其他文件即使使用extern也无法调用
用关键字const修饰的只读变量与常量的区别:
1. 常量是一个静态的值,不需要分配内存,enum类型和#define(注意define不是关键字)宏声明一个常量;变量需要分配内存;
2. const修饰的只读变量不能用来作为定义数组的维数,也不能放在case关键字后面。
(case 后面只能是整型或字符型的常量或常量表达式)
3. 常量是永远无法改变的,但是只读变量一般无法直接再次赋值,但是可以通过指针改变。
更多参考:
http://blog.sina.com.cn/liexusong1985
第2章const只读变量与常量 【指针】
举例:有关字符串常量的疑惑
{
char * p;
p = ( char * )malloc( sizeof ( char ));
p = " abc " ;
p[ 1 ] = p[ 0 ];
printf( " %s