数组变量好比指针……

当你创建了一个数组,数组变量就可以当作指针使用,它指向数组在存储器中的起始地址。当C语言在函数中看到这样一行代码时:

数组变量好比指针…… - 图1

计算机会为字符串的每一个字符以及结束字符\0在栈上分配空间,并把首字符的地址quote变量关联起来,代码中只要出现这个quote变量,计算机就会把它替换成字符串首字符的地址。其实,数组变量就好比一个指针:

数组变量好比指针…… - 图2

……所以传给函数的是指针

这就是为什么fortune_cookie()代码发生了奇怪的事情。看起来把字符串传给了fortune_cookie()函数,但实际上只传了一个指向字符串的指针:

数组变量好比指针…… - 图3

这就是为什么sizeof运算符会返回奇怪结果,它只是返回了字符串指针的大小。指针在32位操作系统中占4字节,在64位操作系统中占8字节。