【指针与数组区别】ch[]与*ch (转载)

【指针与数组区别】ch[]与*ch??RT,这两个有的时候可以替换。但是存字符串时却不完全相同。char ch1[]="我爱你";char *ch2="我爱你";cout<<sizeof(ch1)<<endl;//结果7cout<<sizeof(ch2)<<endl;//结果4我知道第二个是首地址,但第一个是什么,不懂啊,不是首地址吗?
----------------
如鹏站内搜索“指针 数组 区别”
http://so.rupeng.com/?keyword=%E6%8C%87%E9%92%88+%E6%95%B0%E7%BB%84+%E5%8C%BA%E5%88%AB

如下文章供参考:
1、数组与指针---都是"退化"惹的祸【转载】
2、char *与char[ ]的一点疑问
3、看"char *与char[ ]的一点疑问"得到的一些结论
4、Sizeof与Strlen的区别
5、C/C++数组名与指针区别深入探索
回答:
5. 指针变量的sizeof

  学过数据结构的你应该知道指针是一个很重要的概念,它记录了另一个对象的地址。既然是来存放地址的,那么它当然等于计算机内部地址总线的宽度。所以在32位计算机中,一个指针变量的返回值必定是4(注意结果是以字节为单位),可以预计,在将来的64位系统中指针变量的sizeof结果为8。

  char* pc = "abc";

  int* pi;

  string* ps;

  char** ppc = &pc;

  void (*pf)();// 函数指针

  sizeof( pc ); // 结果为4

  sizeof( pi ); // 结果为4

  sizeof( ps ); // 结果为4

  sizeof( ppc ); // 结果为4

  sizeof( pf );// 结果为4

  指针变量的sizeof值与指针所指的对象没有任何关系,正是由于所有的指针变量所占内存大小相等,所以MFC消息处理函数使用两个参数WPARAM、LPARAM就能传递各种复杂的消息结构(使用指向结构体的指针)。

  6. 数组的sizeof

  数组的sizeof值等于数组所占用的内存字节数,如:

  char a1[] = "abc";

  int a2[3];

  sizeof( a1 ); // 结果为4,字符 末尾还存在一个NULL终止符

  sizeof( a2 ); // 结果为3*4=12(依赖于int)

  一些朋友刚开始时把sizeof当作了求数组元素的个数,现在,你应该知道这是不对的,那么应该怎么求数组元素的个数呢Easy,通常有下面两种写法:

  int c1 = sizeof( a1 ) / sizeof( char ); // 总长度/单个元素的长度

  int c2 = sizeof( a1 ) / sizeof( a1[0] ); // 总长度/第一个元素的长度

  写到这里,提一问,下面的c3,c4值应该是多少呢

  void foo3(char a3[3])

  {

  int c3 = sizeof( a3 ); // c3 ==

  }

  void foo4(char a4[])

  {

  int c4 = sizeof( a4 ); // c4 ==

  }

  也许当你试图回答c4的值时已经意识到c3答错了,是的,c3!=3。这里函数参数a3已不再是数组类型,而是蜕变成指针,相当于char* a3,为什么仔细想想就不难明白,我们调用函数foo1时,程序会在栈上分配一个大小为3的数组吗不会!数组是“传址”的,调用者只需将实参的地址传递过去,所以a3自然为指针类型(char*),c3的值也就为4。
源自百科


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/helihui123/archive/2009/10/24/4722036.aspx

posted on 2011-04-15 23:02  COS  阅读(504)  评论(0编辑  收藏  举报