《C和指针》小结
时间:2010-06-28 来源:RobinKQin
1、int const *p 指向整型常量的指针
int * const p 指 向整型的常量指针
int const * const p 指针、指向的整 型都是常量
2、sizeof x = sizeof(x) 返回变量x所占据的字节数。若x是个数组名,则返回数组的长度,单位字节。
sizeof(a=b+1) 返回表达式a=b+1的长度,注意这里并没有向a赋任何值。
3、++ 或--操作符只能作用于可以位于赋值符号左边的表达式(即左值)。
4、假定变量存储于位置100,则可以直接操作地址:
*(int *)100 = 25; //先转换为指向整 型的指针
5、*p++,*++p 既可左值,又可右值。
*p++ 左值3个步骤:1)++产生p的一份拷贝,2)++增加p的值,3)在p拷贝上执行间接访问。
(*p)++ 只能右值,表示对p所指内容++。
若p是指针,则p++或++p都不能当左值,因为表达式的结果是增值(或原值)的一份拷贝,这份拷贝存储的位置时未清晰定义的。
6、对一个指针进行减法运算时,注意别让它非法指向了数组第一个元素之前的内存位置。
7、处理可变参数列表的函数可用stdarg.h头文件中所定义的宏来实现。
8、数组名的值是一个指针常量。
9、p是指向数组中某个元素的指针,则p[n] <===> *(p+(n))
p[n] <===> n[p]
m[p] <===> *(n+(p))
10、字符串长度就是它所包含的字符个数,不包含最后一位NUL————strlen(String)。
11、连接字符串 strcat(dst,src);
拷贝字符串 strcpy(dst,src);
比较字符串 strcmp(dst,src);
查找字符 strchr(str,ch)或strrchr(str,ch);
查找任何几个字符 strpbrk(str,group);
查找一个子串 strstr(s1,s2);
查找标记 strtok(str,sep)。
12、声明一些相互之间存在依赖关系的结构时,可以采用不完整声明。
13、联合变量可以被初始化,但这个初始化值必须是联合第一个成员的类型,而且必须位于一对花括号里。
14、位段是不可移植的,因为它涉及到许多与实现有关的因素。