sizeof小问题?
sizeof不能用于函数类型,这句话是什么意思,请高手举个例子??
我写了个程序:
#include<stdio.h>
int main()
{
int f();
printf("%d\n",sizeof(f()));
return 0;
}
输出结果是:
4
这样看来sizeof能用于函数类型,为什么很多地方都提到不能了???
请高手解答!
[解决办法]
这里被转换成函数指针了,所以大小为4
[解决办法]
楼主理解错误
sizeof不能用于函数类型,这句话是
sizeof(printf);不能这样用 的意思
[解决办法]
没函数指针什么事情
[解决办法]
你说的对!sizeof(f());
只是取f返回值的字节大小
[解决办法]
sizeof()不能用于函数类型,但是原函数中的sizeof(f()),其实指的是sizeof(int),这里只是取f的返回值的字节大小
[解决办法]
取决于你函数的返回值,返回int 在32位机器上占4位,如果你返回值是double的话,打印的值就是8了(32位机器)
[解决办法]
sizeof不能用于函数类型,这句话的意思是 “这个操作符求不出函数所占空间的大小”
[解决办法]
如果楼主想求函数大小,可以参考下面:
//仅对VC6
#include <stdio.h>
void fun1() {
int f1=1;
printf("fun1\n");
printf("fun1\n");
}
void fun2() {
int f2=2;
printf("fun2\n");
}
void fun3() {
}
void main() {
#ifdef _DEBUG
printf("sizeof(fun1)==%d\n",*(int *)((int)fun2+1)-*(int *)((int)fun1+1));
printf("sizeof(fun2)==%d\n",*(int *)((int)fun3+1)-*(int *)((int)fun2+1));
//sizeof(fun1)==59
//sizeof(fun2)==43
#else
printf("sizeof(fun1)==%d\n",(int)fun2-(int)fun1);
printf("sizeof(fun2)==%d\n",(int)fun3-(int)fun2);
//sizeof(fun1)==32
//sizeof(fun2)==16
#endif
}
[解决办法]
sizeof不能用于函数类型,
这句话说的是不能用sizeof(f)来计算函数占用的空间大小。。。
编译不会出错,计算得出的是函数指针的大小,不是函数占用内存的大小。。。
[解决办法]
+1
[解决办法]
sizeof(f())==sizeof(int);
函数调用表达式的结果是函数返回值,
它的占用的空间大小和函数代码的大小没关系,和函数返回值有关,返回值的类型占用的空间大小
sizeof(f)==sizeof(int (*)())=4 (指针的大小)
sizeof不能用于函数类型,这句话是什么意思,请高手举个例子??
这句话的意思是,sizeof不能知道
函数代码所占用的空间大小,不过不太严谨!
在汇编语言里
start proc near
start_pos label this
push ebp
mov ebp,esp
....
pop ebp
ret
end_pos label this
start endp
可以通过 end_pos-start_pos 计算 proc 的代码大小
里面 也只能通过类似的方式估计一下
不能通过 sizeof运算符看来获取,函数占用的空间大小
[解决办法]
sizeof都是取首地址的字节,并且sizeof是一个关键字
[解决办法]
void f();
sizeof(f)结果未定义。
[解决办法]
正是int类型的大小
函数调用表达式的结果是函数返回值,他的类型是函数的返回值类型
函数名的类型是相应的函数指针类型。
[解决办法]
sizeof printf 这样的做法是明令禁止的
[解决办法]
4是返回值(int型4个字节)