注册 登录
编程论坛 C++教室

静态数据成员的初始化问题!各位高手不吝赐教!!

wangzhao8550 发布于 2011-05-14 15:03, 842 次点击
程序代码:
class Person
{
  private:
         static char *name[10] ;
..............
..............
..............
};
关于这样一个指针数组静态成员怎样初始化?如果只是指针静态成员又或者是数组静态成员的初始化在网上还可以搜到解决方案,各位高手帮忙看看,万分感谢!
7 回复
#2
rjsp2011-05-14 17:15
class Person
{
private:
    static char *name[10];
};

char *Person::name[10] = {…………};
#3
weststreet2011-05-14 17:21
char *Person::name[10] ="要初始化的字符串"
#4
wangzhao85502011-05-16 10:50
谁还有正解吗?
#5
ucyan2011-05-16 19:41
char *Person::name[10] ="要初始化的字符串" 就可以啦~~
你要理解静态对象的含义,静态对象分为,静态局部对象和静态全局对象
这里就讨论一下静态局部对象吧,在C++语言中,每个对象都有一个生命期,在默认情况下局部变量的生命期局限于
所在函数的每次执行期间,当函数被调用时会产生一个自动对象,它在每次调用函数时创建和撤销,当函数结束时,会
释放它的局部存储空间,因此不能再访问。
而静态局部对象,它的生命期却能跨越了这个函数的多次调用,如在一个函数中创建一个静态对象  static int a = 10;它
一旦建立就会在程序结束前都不会被撤销。在函数的多次调用过程中,静态局部对象会持续存在并保持它的值
下面有一个列子
程序代码:
size_t count_calls()
{
    static size_t ctr = 0;
    retrun ++ctr;
}
int main()
{
    for (size_t i = 0; i != 10; ++i)
    {
        cout << count_calls() <<endl;
    }
    return 0;
}
静态全局变量就自己体会吧~~
#6
诸葛修勤2011-05-16 20:41
程序代码:
#include <iostream>
#include <cstdio>
using namespace std;

class A
{
public:
    static char *name[10];
};

char *A::name[10] = {"12345", "12345", "23456", "23456", "54321", "54321", "723", "823", "923", "1320"};

int main(void)
{
    for(int i=0; i<10; ++i)
    {
        printf("%p\n", A::name[i]);
    }

    A::name[1] = new char[10];
    printf("%p\n", A::name[1]);
    for (int i=0; i<9; ++i)
    {
        A::name[1][i] = '0' + i;
        printf("%p\n", &A::name[1][i]);
    }
    A::name[1][9] = 0;
    printf("%p\n", &A::name[1][9]);

    printf("%s\n", (char*)(0x00396f18));

    cout << endl;

    return 0;
}
#7
小猫天涯klz2011-05-16 21:11




表示不会
#8
诸葛修勤2011-05-16 21:23
程序代码:
#include <iostream>
using namespace std;

class A
{
public:
    static char *name[10];
};

char *A::name[10] ={
    new char[10], new char[11], new char('3'),
    new char('4'), new char('5'), new char('6'),
    new char('7'), new char('8'), new char[30],
    new char('0')};


int main(void)
{
    for (int i=0; i<10; ++i)
    {
        cout << A::name[i][0] << endl;
    }
    cout << endl;

    A::name[0] = "yxf";
    A::name[1] = "yyy";
    A::name[8] = "12345678901112131415161718190";
    for (int i=0; i<10; ++i)
    {
        cout << *A::name[i] << endl;
    }
    cout << endl;

    for (int i=0; i<10; ++i)
    {
        cout << A::name[i] << endl;
    }
    cout << endl;

    return 0;
}
1