第1个回答 2020-04-20
1、char
*p="asdf";
则sizeof(p)=2;
是返回指针p占用字节数;即使你是先定义再赋值,char
*p;
p="asdfasdf";
sizeof(p)都是等于2;任何指针在turbo
c中都是2个字节,不是说“字符串中有'0\'占一个字节,字符类型指针占一个字节”。。楼上有的说sizeof(p)是求变量p或字符串长度,是错的,是求占用字节数,不是长度,长度是用函数strlen(p);
sizeof不是函数,是一种运算符。。例子:char
p[]="abc";则sizeof(p)=4;strlen(p)=3;
比较于char
p[10]="abc";
sizeof(p)=10;
strlen(p)=3。。。
但如果定义成:char
p[]="asdf";
则sizeof(p);就等于5了,数组名p虽然可以看做指针,但不完全跟指针一样,这就是例子了。。
2、编译器可以看作一个虚拟机器,可以有自己虚拟的内存,栈等。。编译系统就可以看作是物理电脑操作系统上虚拟机的运行系统。。所以不一定是物理地址,但跟物理地址有映射关系,至于为什么,怎么映射,我也不知道。。。
3、编译器是16位。。跟“loat
为4个字节
double
32个字符”??。。跟float
4字节32位没关系,那是编译器设定的,就是常说电脑是16位或32位操作系统一样,编译器16位就看作虚拟机器是16位运行系统。。
4、
我也不知道为什么,
(*p)(int,int);是int
(*p)(int,int);吧。。。