牛骨文教育服务平台(让学习变的简单)
博文笔记

C语言中数组名和指针的区别 及 sizeof用法

创建时间:2010-08-02 投稿人: 浏览次数:231
  1. #i nclude <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;   

 实际情况是:第6行输出10,第7行输出4;

 

先给出三个结论:

  (1)数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组;

  (2)数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量;

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

 

1、数组名指代一种数据结构:数组

  现在可以解释为什么第1个程序第6行的输出为10的问题,根据结论1,数组名str的内涵为一种数据结构,即一个长度为10的char型数组,所以sizeof(str)的结果为这个数据结构占据的内存大小:10字节。

  1. int  intArray[10];   
  2. cout <<  sizeof (intArray) ;

第2行的输出结果为40(整型数组占据的内存空间大小)。

 

2、数组名可作为指针常量

  根据结论2,数组名可以转换为指向其指代实体的指针,所以程序1中的第5行数组名直接赋值给指针,程序2第7行直接将数组名作为指针形参都可成立。

 

下面的程序成立吗?

C++代码
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。