background image

cout << sizeof(str) << endl;

cout << sizeof(pStr) << endl;

  输出结果为:

10

4

  这说明数组名 str 指代数据结构 char[10]  

规则 2 数组名可以转换为指向其指代实体的指针,而且是一个指针常量,不能作自增、自减等操作,不

能被修改;

char str[10];

char *pStr = str;

str++; //编译出错,提示 str 不是左值 

pStr++; //

 

编译正确

规则 3 指向数组的指针则是另外一种变量类型(在 WIN32 平台下,长度为 4),仅仅意味着数组的存放

 

地址;

规则 4 数组名作为函数形参时,在函数体内,其失去了本身的内涵,仅仅只是一个指针;很遗憾,在失

去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。

例如:

void arrayTest(char str[])

{

cout << sizeof(str) << endl;   //输出指针长度

 

    str++; //编译正确

}

int main(int argc, char* argv[])

{

 char str1[10] = "I Love U";

 arrayTest(str1);

return 0;

(5)“整形变量为 32

  整形变量是不是 32 位这个问题不仅与具体的 CPU 架构有关,而且与编译器有关。在嵌入式系统的编程中,一般

整数的位数等于 CPU 字长,常用的嵌入式 CPU 芯片的字长为 8、16、32,因而整形变量的长度可能是 8、16、32。在

未来 64 位平台下,整形变量的长度可达到 64 位。

  长整形变量的长度一般为 CPU 字长的 2 倍。

  在数据结构的设计中,优秀的程序员并不会这样定义数据结构(假设为 WIN32 平台):

typedef struct tagTypeExample

{

unsigned short x;

unsigned int y;

}TypeExample;

他们这样定义:

#define unsigned short UINT16 //16 位无符号整数

#define unsigned int UINT32 //32 位无符号整数