有关sizeof和static的问题
这个运算符和关键字一直很难搞清楚啊,刚看到面试宝典上说sizeof只计算栈上的内存容量,很好奇得试了下下面的代码
- C/C++ code
static char temp[10] = {"1234"}; printf("sizeof=%d\n",sizeof(temp));结果竟然等于10....为什么呢? static关键字说明的不是全局变量吗? 怎么sizeof的结果还是10呢?
另外,还有个问题就是如下声明:
- C/C++ code
strtuc AA { int a; int b; static int c; }aa;按照面试宝典上的意思是sizeof(aa)应该为8,因为c是在全局处,这个结果对吗?
我用VC6.0试了下,悲剧的是竟然说我声明出错...
error C2246: 'c' : illegal static data member in locally defined class
为什么呢? struct里应该可以声明static变量的吧 这样声明哪错了,高人指点下,大家一起学习学习.
[解决办法]
只计算栈?
按你的说法, 对 static int a; sizeof(a) 就应该等于零了,但是实际上
The sizeof operator never yields 0, even for an empty class.
[解决办法]
VC6环境下:
- C/C++ code
//1.cpp#include<iostream>using namespace std;extern int extern_array[];//此处声明外部数组,这个数组定义在其他文件中int array[10];struct AA{ int a; int b; static int c;}aa;int AA::c = 0;int main(){ cout<<sizeof(AA)<<endl; cout<<sizeof (array)<<endl; //cout<<sizeof (extern_array)<<endl;//sizeof不能计算外部数组的大小,因为外部数组声明时可以不声明其大小 system("pause"); return 0;}//2.cppint extern_array[100];
[解决办法]
劝楼主还是别看那本宝典了
我从你说的页数附近看了几眼就发现了两个错误:
- C/C++ code
string strArr1[] = {"Trend", "Micro", "Soft"};//书上说sizeof (strArr1) == 12; 明明应该是3 * sizeof(string); string是一个类,并不是指针类型//居然能举出这样的例子:int ss[100] = "0123456789";
[解决办法]