首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

有关sizeof和static的有关问题

2012-07-02 
有关sizeof和static的问题这个运算符和关键字一直很难搞清楚啊,刚看到面试宝典上说sizeof只计算栈上的内存

有关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";
[解决办法]
探讨
引用:
引用:
LS正解,cout<<sizeof(AA)<<endl; 结果为8,是没计算c变量的内存容量.

但是为什么下面的代码是错的,把类的声明放在main里就是错的:

C/C++ code

int main()
{
struct AA
{
int a;
int b;
static……

热点排行
Bad Request.