1 、定义数组,要给定其长度,也可以用Type a[ ] = {……} 的方式。
在对数组进行操作时,可能需要计算数组长度,方法是:sizeof(数组名)/sizeof(元素类型)
数组int a[4]; sizeof(a)=4*4=16字节 (int为4个字节) int *p=a; sizeof(p)=4字节 对数组应用sizeof,可以得到整个数组分配的字节数(存储全部数据占用的内存字节数) 对指针应用sizeof,只是得到分配给用来存储一个地址值的指针所用的字节数,即4个字节。 (上面都是在32位编译系统) C++中sizeof得到的是字节数,也就是你所说的“长度单位” 求大小,可以手动计算,需要知道数据类型,是否有字节对齐(编译器选项,也可代码控制和切换)。我以前做过统计结构体大小的小程序,同时计算每个成员变量的相对地址。
转自知乎-----
C 语言跟 C++ 是不同的。最大的不同之处在于,它不会象变魔法般的在后台以程序员不知道的方式添加一些奇奇怪怪的东西。——这可能是好事,也可能是坏事,取决于你在什么领域进行编程。
一个数组就是一串序列,它的地址以及存储的内容都一目了然在那里了,没有任何地方记录了有关其「长度」的信息。所以你自然没有办法知道它的长度。 信息都保存在内存中,你能获取一个信息就意味着这个信息或者用来推算这个信息的相关信息必须被保存在内存中的某个地方,你能知道一个数组的长度就必须有某个地方保存了这个数组的长度信息。
题主要的是有某个「魔法」的方法知道一个指针指向的内容的长度,但如果你根本没有在任何地方保存它的长度,没有人知道,又如何能获取?
所以,传递长度本质上来说就这么几个办法,1,单独传一个长度参数,(C方式),或者对数据内容进行约定(C字符串方式),2,把数据包装成一个结构,结构中有一个字段是长度,另外一个字段是数据内容,同时在添加一些其他的字段作为控制信息等(C++方式)。3,其他各种黑科技,使用这些黑科技一般会造成程序不可移植,只能适用于特定场合。
一个数组就是一串序列,它的地址以及存储的内容都一目了然在那里了,没有任何地方记录了有关其「长度」的信息。所以你自然没有办法知道它的长度。 信息都保存在内存中,你能获取一个信息就意味着这个信息或者用来推算这个信息的相关信息必须被保存在内存中的某个地方,你能知道一个数组的长度就必须有某个地方保存了这个数组的长度信息。
题主要的是有某个「魔法」的方法知道一个指针指向的内容的长度,但如果你根本没有在任何地方保存它的长度,没有人知道,又如何能获取?
所以,传递长度本质上来说就这么几个办法,1,单独传一个长度参数,(C方式),或者对数据内容进行约定(C字符串方式),2,把数据包装成一个结构,结构中有一个字段是长度,另外一个字段是数据内容,同时在添加一些其他的字段作为控制信息等(C++方式)。3,其他各种黑科技,使用这些黑科技一般会造成程序不可移植,只能适用于特定场合。
作者:pansz
链接:https://www.zhihu.com/question/26198842/answer/32367092
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2、指针指向的字符数组长度的获取方法,不能用sizeof,因为用sizeof(指针),得到指针长度为4
应该用strlen()函数。
#include <iostream.h> #include <string.h> int num(char *ptr) { int bb = strlen(ptr); return bb; } int main() { char *p= new char[100]; p = "string"; int b = num(p); cout<<b<<endl; return 0;}
3.如果是通过malloc或者new分配的数组,由于分配的时候是自己制定的数组大小,所以不需要计算就可以得到。