单引号引起的一个字符对应的是该字符在编译器采用的字符集中的序列值。
双引号引起的字符串代表的是一个指向无名数组起始字符的指针,并且结尾是‘\0’。
float *g(), (*h)();
g是一个函数,该函数返回值得类型是指向浮点数的指针;
h是一个指针,该指针所指向的函数的返回值类型为浮点型。
赋值运算符的优先级要低于任何一个比较运算符
注意else悬挂问题
else始终与同一对括号内最近的未匹配的if结合。
*(a+i)
是数组a中下标为i的元素的引用,简记为a[i]。
*(*(a+i)+j)// 简记为a[i][j]
字符串常量代表了一块包括字符串中所有字符以及一个空字符(‘\0’
)的内存区域的地址。
char *r, *malloc();
r = malloc(strlen(s)+strlen(t)+1);
if(!r){
complain();
exit(1);
}
strcpy(r,s);
strcat(r,t);
free(r);
复制指针并不同时复制指针所指向的数据。
当常数0被转换为指针使用时,这个指针绝对不能被解除引用。
if(p == (char *)0)...
正确
int i,a[10];
for(i=1;i<=10;i++)
a[i] = 0;
陷入死循环,由于内存中数组a之后的一个字实际上是分配给了整形变量i
计数器i的值设置为0。
INT_MAX
是一个已定义常量,代表可能的最大整数值。
getchar()
函数一般情况下返回的是标准输入文件的下一个字符
内存分配函数相关知识
malloc、realloc、free
调用malloc(n)
将返回一个指针,指向一块新分配的可容纳n个字符的内存。
调用realloc(n)
时,需把指向一块已分配的区域指针以及这块内存新的大小作为参数传入,可调整这块内存区域为新的大小,也有可能涉及到内存的拷贝。
尽可能在有歧义的地方,加括号。
注意数组越界的问题。
printf函数是把数据写道标准输出,fprintf函数可把数据写到任何文件中。
printf(stuff)
fprintf(stdout,stuff)