运行代码时,计算机在想什么
- 计算机看到函数。
void fortune_cookie(char msg[])
{
...
}
- 紧接着,计算机看到了函数的内容。
printf("Message reads: %s\n", msg);
printf("msg occupies %i bytes\n", sizeof(msg));
- 计算机调用函数。
char quote[] = "Cookies make you fat";
fortune_cookie(quote);
要点
数组变量可以被用作指针。
数组变量指向数组中第一个元素。
如果把函数参数声明为数组,它会被当作指针处理。
sizeof
运算符返回某条数据占用空间的大小。也可以对某种数据类型使用
sizeof
,例如sizeof(int)
。
sizeof
(指针)在32位操作系统中返回4,在64位操作系统中返回8。
这里没有蠢问题
问:
sizeof
是一个函数吗?答:不是,它是一个运算符。
问:有什么区别?
答:编译器会把运算符编译为一串指令;而当程序调用函数时,会跳到一段独立的代码中执行。
问:所以程序是在编译期间计算
sizeof
的?答:没错,编译器可以在编译时确定存储空间的大小。
问:为什么在不同的计算机上指针变量的大小不同?
答:在32位操作系统中,存储器地址以32位数字的形式保存,所以它叫32位操作系统。32位==4字节,所以64位操作系统要用8个字节来保存地址。
问:如果我创建了一个指针变量,它位于存储器中吗?
答:是的,指针变量只不过是一个保存数字的变量罢了。
问:我可以找到指针变量的地址吗?
答:可以用
&
运算符找到它的地址。问:我可以把指针转化为一般的数字吗?
答:在大多数操作系统中,可以这样做。C编译器通常会把
long
数据类型设为和存储器地址一样长。如果想要把指针p
保存在long
变量a
中,可以输入a=(long)p
,过几章我们会学习这种方法。问:是在大多数操作系统中吗?所以并不是全部?
答:并不是全部。
三位钻石王老五准备参加今天的“非诚勿扰”。
今晚的幸运女嘉宾将从三位选手中选出她的白马王子,她会选谁呢?
三位钻石王老五准备参加今天的“非诚勿扰”。
今晚的幸运女嘉宾将从三位选手中选出她的白马王子,她会选谁呢?
![]()