以图明志

C/C++编程语言

C语法陷阱:C语言的二维数组模拟

用指针与一维数组理解与构造
现在我们可以考虑二维数组了,正如前面所讨论的,它实际上是以数组为元素的数组,尽管我们也可以完全依据指针编写操纵一维数组的程序,这样做在一维情形下并不困难,但是对于二维数组从记法上的便利性来说采用下述形式就几乎是不可替代了。还有,如果我们仅仅使用指针来操纵二维数组,我们将不得不与C语言中最为“晦暗不明”的部分打交道,并常常遭遇到潜伏着的编译器bug。

C/C++编程语言

C语法陷阱:指针与数组

理解指针与变量间的关系
如果一个指针指向的是数组中的一个元素,那么我们只要给这个指针加1,就能够得到指向数组中下一个元素的指针,同样的,如果我们给这个指针减一,得到就是指向该数组中前一个元素的指针。对于除了1以外的其他整数的情形,以此类推。上面这段讨论暗示了这样一个事实:给一个指针加上一个整数,与给该指针二进制表示加上同样的整数,两者的含义截然不同。

C/C++编程语言

C语法陷阱:理解如何声明一个数组

声明一个数组的实质
语言中指针与数组这两个概念之间的联系是密不可分的,以至于如果不能理解一个概念,就无法彻底理解另一个概念。C语言中只有一维数组,而且数组的大小必须在编译期就作为一个常数确定下来。然而,C语言中数组的元素可以是任何类型的对象,当然也可以是另外一个数组。

C/C++编程语言

C语法陷阱:理解(*(void(*)())0)()

用(void (*)())0来替换函数指针fp
拥有了前面的预备知识,我们现在可以分两步来分析表达式 (*(void(*)())0)() 。第一步,假定变量fp是一个函数指针,那么如何调用fp所指向的函数呢?因为fp是一个函数指针,那么*fp就是该指针所指向的函数,所以(*fp)()就是调用该函数的方式。

C/C++编程语言

C语法陷阱:从变量与函数的声明到类型转换符

一个转换“恐慌区”到“学习区”的过程
程序设计错误,或者你无法按某个算法写出程序,实际上反应的是程序员与该程序与算法的“心智模式”不匹配,或者说,你的心智模式无法包容与理解下该程序算法所包含的思想。比如下面的一个语句:( *( void(*)())0)();这是一个什么东西呢?
1 / 1 首页 < Prev 1 Next > 尾页 页码: