0.1 本书的目标

理解“指针就是地址”,是学习指针的必要条件,但不是充分条件,这只是万里长征第一步。

困惑:

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等等……

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容