首页 > 代码库 > K&R阅读笔记——指针

K&R阅读笔记——指针

地址运算符&只能应用于内存中的对象,即变量和数组元素。他不能作用于表达式,常量和register类型的变量。

*ip++ 和 (*ip)++的区别,前者将指针ip本身指向下一个元素,而后者将ip指向的内容加1,因为一元运算符*和++,优先级相同,但是结合顺序是自右向左。

对于:int a[10]

  &a 的类型为int (*)[10],是一位数组,而a的类型为int *类型。所以注意不要搞错。

  int *p = a;是可以的。

  int *p = &a[0];也是可以的

  &a[i]和a+i的含义是相同的。

  但要注意:数组名是常量,而指针是变量。可以对指针进行算数运算,但是对数组名是不可以进行算数运算的。

  对指针进行算数运算的含义是:取其前后的若干个相同类型的元素。

char string[] = "hello world!"

char *string2 = "hello world!"

两者有着很大的区别,string在内存中开辟了一个数组来存放字符串,可以进行修改;而string2只是一个指针,指向了常量字符串,如果试图修改其内容,结果是没有定义的。

对于二维数组:int a[3][4]

如果想在函数中作为参数传入二维数组,则函数应该写为;

void fun(int a[3][4]);void fun(int a[][4]);或者void fun(int (*a)[4]);

命令行参数void main(int argc, char *argv[]);

  argv[0][1],**argv第一个字符串的第一个字符

  argv[1][1],(*argv)[1], *(*argv+1)第一个字符串的第一个字符

在后续的学习中注意弄清楚;二维数组和指针数组,及指向指针的指针之间的关系。int *p[13]和int (*p)[13]在引用和赋值时候的区别是什么?

 

K&R阅读笔记——指针