理解“指针就是地址”,是学习指针的必要条件,但不是充分条件,这只是万里长征第一步。
困惑:
1.指向int的指针?指向char的指针?既然是地址,有什么不同呢?
2.给指针+1时,有时前进2个字节,有时前进4个字节?这是为什么?怎么做到的呢?
3.scanf时,%d必须在其输出的变量前加&,对于%s,则不需要。
4.将指针和数组混为一谈,犯下“将没有分配内存区域的指针当做数组进行访问”或者“将指针赋给数组”这样的错误!
导致这些悲剧的幕后黑手是:
1.C语言的奇怪语法
2.数组和指针之间微妙的兼容性
关于C语言中的声明中的一些困惑:
1.[]比*的优先级高,那么char *s[10]到底应该怎么样理解呢?
2.double (*p)[3]和 void (*func)(int a)应该怎么理解呢?
3.int *a 和 int a[]在什么时候是可以互换的呢?
4.空的[]可以在什么情况下使用?是什么意义?
注意以下两个事实:
1.在引用数组中的元素时,其实a[i]中的[]和数组毫无关系。
2.C里面不存在多维数组
指针有着底层而邪恶的一面,但是,它又是构造链表和树等“数据结构”不可缺少的概念。如果没有指针,我们是做不出那样的应用程序的。凡是成熟的开发语言,必定存在指针,如Lisp等等……