得到指针指向的数组的长度
1 、定义数组,要给定其长度,也可以⽤Type a[ ] = {……} 的⽅式。
在对数组进⾏操作时,可能需要计算数组长度,⽅法是:sizeof(数组名)/sizeof(元素类型)
数组int a[4]; (a)=4*4=16字节(int为4个字节)
int *p=a; (p)=4字节
对数组应⽤,可以得到整个数组分配的字节数(存储全部数据占⽤的内存字节数)
对指针应⽤sizeof,只是得到分配给⽤来存储⼀个地址值的指针所⽤的字节数,即4个字节。
(上⾯都是在32位编译系统)
C++中sizeof得到的是字节数,也就是你所说的“长度单位”
sizeof 指针求⼤⼩,可以⼿动计算,需要知道数据类型,是否有字节对齐(编译器选项,也可代码控制和切换)。我以前做过统计结构体⼤⼩的⼩程序,同时计算每个成员变量的相对地址。
转⾃知乎-----
C 语⾔跟 C++ 是不同的。最⼤的不同之处在于,它不会象变魔法般的在后台以程序员不知道的⽅式添加⼀些奇奇怪怪的东西。——这可能是好事,也可能是坏事,取决于你在什么领域进⾏编程。
⼀个数组就是⼀串序列,它的地址以及存储的内容都⼀⽬了然在那⾥了,没有任何地⽅记录了有关其「长度」的信息。所以你⾃然没有办法知道它的长度。 信息都保存在内存中,你能获取⼀个信息就意味着这个信息或者⽤来推算这个信息的相关信息必须被保存在内存中的某个地⽅,你能知道⼀个数组的长度就必须有某个地⽅保存了这个数组的长度信息。
题主要的是有某个「魔法」的⽅法知道⼀个指针指向的内容的长度,但如果你根本没有在任何地⽅保存它的长度,没有⼈知道,⼜如何能获取?
所以,传递长度本质上来说就这么⼏个办法,1,单独传⼀个长度参数,(C⽅式),或者对数据内容进⾏约定(C字符串⽅式),2,把数据包装成⼀个结构,结构中有⼀个字段是长度,另外⼀个字段是数据内容,同时在添加⼀些其他的字段作为控制信息等(C++⽅式)。3,其他各种⿊科技,使⽤这些⿊科技⼀般会造成程序不可移植,只能适⽤于特定场合。
作者:pansz
链接:www.zhihu/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分配的数组,由于分配的时候是⾃⼰制定的数组⼤⼩,所以不需要计算就可以得到。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论