const指针
const -- 常量化,限制为只读
1、const int *p; -- 限制 *p 只读,不能通过间接访问去改变原来变量的值,可以修改p的指向
int const *p;2、int * const p; -- 限制 p 只读,不能再改变p的指向,但是可以改变变量的值
3、const int *const p; -- 限制 *p p 只读,不能通过间接访问去改变原来变量的值,也不能再改变p的指向
int const * const p;
strlen和sizeof
strlen -- 计算给定的字符串的长度,不包括'\0'
strlen(给定的字符串);
返回给定的字符串的长度
sizeof求整个空间的大小,得到的是整个一维数组的空间大小
extern:
extern -- 引用、声明全局变量、函数等
(1)可以在一个文件中去扩展全局变量的作用
(2)将全局变量的作用域扩展到其他文件
(3)修饰函数,此函数就成为了外部函数,可供其他文件调用
static -- 静态类型
(1)修饰局部变量,延长局部变量的生命周期(有的系统可以延长到程序结束)
(2)修饰全局变量,将这个全局变量作用域限制在本文中
(3)修饰函数,将这个函数的作用域限制在本文中
static的全局变量,表明这个变量仅在本模块中有意义,不会影响其他模块。
他们都放在静态数据区,但是编译器对他们的命名是不同的。如果要使变量在其他模块也有意义的话,需要使用extern关键字
static全局变量与普通的全局变量有什么区别?
static全局变量只初使化一次,防止在其他文件单元中被引用;static局部变量和普通局部变量有什么区别?
static局部变量只被初始化一次,下一次依据上一次结果值;static函数与普通函数有什么区别?
static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝.=================================================
把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。
=================================================
什么是预编译,何时需要预编译:
①总是使用不经常改动的大型代码体;
②程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项;在这种情况下,可以将所有包含文件预编译为一个预编译头。
不能在程序运行的时候,随意更改数组的大小,不过可以用malloc开辟通用数组
不能不告诉计算机数组的大小
例如:
int a[];
int b=0; scanf("%d",&b); int a[b]={0};
给数组元素赋值只能一个一个的赋值,可以用for循环遍历赋值
一维数组用普通一级指针接收,二维数组用行指针接收
字符串:多个字符连接在一起,用双引号括起来,结尾有'\0'
字符数组:char a[10]={ 'a','b','c'... }; //结尾没有'\0',是多少个数组成员便有多少个数组成员
gets()函数存一个字符串到 a 数组里面,会自动在末尾加上'\0',puts()一样
对于字符串来说,如果在定义数组时,没有初始化,在最后赋值时一定要加上'\0',否则会出现乱码
scanf("%d",&n);
int a[n]={0}; 典型错误不允许初始化可变数组
宏定义在预处理进编译成常量了
& | ^
http://t.csdn.cn/HZlXT
<< >>
http://t.csdn.cn/XrIDG