《The C Programming Language》学习笔记

第五章:指针和数组

  1. 单目运算符的优先级均为2,且结合方向为自右向左。
*ip++;  // 将指针ip的值加1,然后获取指针ip所指向的数据的值
(*ip)++;  // 将指针ip所指向的数据的值加1
  1. 当计算a[i]时,C编译器会立即将其转换为*(a+i)。也就是说,C语言中数组下标表达式和指针加偏移是等价的。

  2. 数组名和指针的一个区别:指针是变量,可以进行赋值和加减运算;数组名不是变量,不能进行赋值和加减运算。

  3. p[-1], p[-2]在语法上是合法的,只要保证元素存在,后向索引数组也是可以的。

  4. 指向同一个数组(包括数组最后一个元素的下一个元素)的两个指针可以进行大小比较,而对没有指向同一个数组的两个指针进行大小比较的行为是undefined的。

  5. 指针的合法操作:同类指针赋值、指针加减某个整数、指向同一数组的两个指针相减或比较大小、将指针赋值为0或与0比较;指针的非法操作:两个指针相加、相乘、相除,以及指针与浮点数相加减等。

  6. char *pmsg = "now is the time";是将一个指向字符数组的指针赋值给pmsg,而不是字符串拷贝。C语言不提供任何对整个字符串作为一个单元进行处理的操作符。

  7. 注意通过字符串指针修改字符串内容的行为是undefined的:
char amsg[] = "now is the time";  // an array
char *pmsg = "now is the time";   // a pointer

猜你喜欢

转载自www.cnblogs.com/wuhualong/p/read_the_c_programming_language.html