如何不传长度测出指针指向目标的个数?
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*,你只能提供长度给他,而不是去求长度,因为逻辑上地址可以随便取,即使越界。