关于使用数组下标返回函数



请找到下面显示的代码片段:

unsigned char au8Buffer[4] = {1, 2 , 3, 4} ;//Global array declared
class abc
{
public:
unsigned char *Getheader();
}
void func(abc *ptr)
{
unsigned int a, b;
a = (ptr->Getheader())[0];
b = (ptr->Getheader())[1];
printf("the value of A = %dn",a);
printf("the value of B = %dn",b);
}
unsigned char * abc:: Getheader(void)
{
static int count  = 0;
count++;
if(1 == count)
return &au8Buffer[0];
else
return &au8Buffer[1];
}
main()
{
abc Testobj;
func(&Testobj);
}

有人能告诉我为什么变量"b"的值是3吗?。我原以为b的值是2。

每个对象和引用都有生存期,这是一个运行时属性:对于任何对象或引用,当程序的生存期开始时,都有一个执行点,当它结束时,也有一个时刻。au8Buffer的生存期在函数结束时结束。返回指向其内容的指针会导致未定义的值。您可以为abc创建一个构造函数,并将au8Buffer的初始化移到构造函数中。

最新更新