代码改变世界

如何不传长度测出指针指向目标的个数?

2007-04-11 10:52  flyingfish  阅读(1185)  评论(1编辑  收藏  举报

这个问题是个很基本的问题,却是经常搞混。

今天找了资料把它给搞明白了,免得下次还犯错。

看了这个文章如何知道一个char*里有多少个字符这么说:

  sizeof是编译时的概念。你可以把它想象成宏。编译时sizeof(xxx)被xxx的大小所替代。  所以sizeof(char   *)被4替代(指针的大小是4)  
  char   str[255];  
  sizeof(str);就可以得到数组的大小  
  这些在编译时候就可以确定下来了。  
  而strlen是一个运行时的函数  
  char   *p   =   "hehe";  
  strlen(p);这个需要一步步地运行,得到p的长度。
 

 

按照我的理解来总结:

指针是一种自己定义的类型,和其他类型一样,但是它除过自身包含一个DWORD长度的数值来指示地址之外,还能够识别所指向的目标的类型。仅此而已,他本身并不包含长度等信息,也无法获得长度等信息。字符串这个特例外,其他都需要自己维护长度。

要获取指针所指内容的长度是不可行的,除非是char*,因为它有\0做结束符
其他的比如int*,你只能提供长度给他,而不是去求长度,因为逻辑上地址可以随便取,即使越界。