数组名 和 指针

    技术2022-05-11  63

     

    1. #include <iostream.h>2. void arrayTest(char str[])3. {4.  cout << sizeof(str) << endl;5. }6. int main(int argc, char* argv[])7. {8.  char str1[10] = "I Love U";9.  arrayTest(str1); 10.  return 0;11. }

    程序的输出结果为4。不可能吧?  一个可怕的数字,前面已经提到其为指针的长度!  结论1指出,数据名内涵为数组这种数据结构,在arrayTest函数体内,str是数组名,那为什么sizeof的结果却是指针的长度?这是因为:  (1)数组名作为函数形参时,在函数体内,其失去了本身的内涵,仅仅只是一个指针;  (2)很遗憾,在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。

    1. #include <iostream.h>2. int main(int argc, char* argv[])3. {4.  char str[10];5.  char *pStr = str;6.  cout << sizeof(str) << endl;7.  cout << sizeof(pStr) << endl;8.  return 0;9. }

     在WIN32平台下,指针长度为4;实际情况是:第6行输出10,第7行输出4

        揭密数组名  现在到揭露数组名本质的时候了,先给出三个结论:  (1)数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组;  (2)数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量;  (3)指向数组的指针则是另外一种变量类型(在WIN32平台下,长度为4),仅仅意味着数组的存放地址!


    最新回复(0)