11.const:
(1)const定义的是变量,但又相当于常量;说它定义的是常量,但又有变量的属性,所以叫常变量。用 const 定义常变量的方法很简单,就在通常定义变量时前面加 const 即可,const 和变量类型 int 可以互换位置,二者是等价的:
const int a = 10;
int const a = 10;
const char *p; // 声明一个指向字符常量的指针,p所指向的内容不可以被修改
char const *p;// 同上
char * const p;//声明一个指向字符或字符串的指针常量,p的值不可以被修改
(2)用 const 定义的变量的值是不允许改变的,即不允许给它重新赋值,即使是赋相同的值也不可以。所以说它定义的是只读变量。这也就意味着必须在定义的时候就给它赋初值。如果定义的时候未初始化,对于未初始化的局部变量,程序在执行的时候会自动把一个很小的负数存放进去。这样后面再给它赋初值的话就是“改变它的值”了,即发生语法错误。
(3)用 const 修饰的变量,无论是全局变量还是局部变量,生存周期都是程序运行的整个过程。全局变量的生存周期为程序运行的整个过程这个是理所当然的。而使用 const 修饰过的局部变量就有了静态特性,它的生存周期也是程序运行的整个过程。我们知道全局变量是静态的,静态的生存周期就是程序运行的整个过程。但是用const修饰过的局部变量只是有了静态特性,并没有说它变成了静态变量。
(4)数组的长度不能是变量。虽然 const 定义的是只读变量,就相当于是定义一个常量。但是只读变量也是变量,所以 const 定义的变量仍然不能作为数组的长度。但是需要注意的是,在 C++ 中可以。C++ 扩展了 const 的含义,在 C++ 中用 const 定义的变量也可作为数组的长度。
12.static:
(1)普通局部变量存储于进程栈空间,使用完毕会立即释放。而用static修饰的局部变量存储在进程的全局数据区,即使函数返回,它的值也会保持不变。延长了该局部变量的生命周期,但是作用域没有改变。
(2)static修饰的全局变量,改变了它的作用域,即只能在自己所在的源文件内部使用。
(3)static修饰的函数,改变了它的链接属性,即只能在自己所在的源文件内部使用。
(4)全局变量(包括有static前缀的)未初始化, 默认值是0。
(5)局部变量未初始化,默认值为随机值(如果要输出编译器会报错)。除了加static 前缀的局部变量,因为此时的局部变量是放在静态存储区内的,跟全局变量一样。
13.%p:以十六进制整数方式输出指针的值(是一个地址)
printf(“%p\n”,&a); //打印a的地址,假如为0x00B5F82C
printf(“%d\n”,&a); //以十进制方式打印a的地址,对应为11925548
14.指针大小:int*、char*、float*…在32位平台均为4byte,在64位平台均为8byte。
int a[10]={0};
char b[10]={0};
void length(int arr[]) //参数传递的是数组首元素的地址
{
sizeof(arr); //长度为4 byte
}
void length_1(char b[])
{
sizeof(b); //长度也为4 byte
}
15.ch=getchar() != EOF; EOF——输入Ctrl+Z
16.’\n’的ASCII码值为10。
17.在输入字符串时,如果是连续的字符串(中间没有空格),则可以使用scanf()和gets();如果输入的字符串带空格,则只能用gets()。例如要输入:gone with the wind,用scanf()输入的话就只能得到第一个空格前面的字符gone。
18.循环0次:
19.”==”不能用来判断字符串是否相等。
20.函数:当实参传递给形参时,形参只是实参的一份临时拷贝(形参也拥有了自己的空间),对形参的修改是不会改变实参的。