C++ 如何从动态分配中获取数组大小?
Posted
技术标签:
【中文标题】C++ 如何从动态分配中获取数组大小?【英文标题】:C++ How to get arraysize from dynamic allocation? 【发布时间】:2016-11-20 00:20:53 【问题描述】:我声明了int star = new int;
,并将值放入star
。比如:
int *star = new int;
int i,j = 0;
for (i = 0; i < length; i++)
if(words[i] == '*')
star[j] = i;
j++;
现在我想知道star
的大小。我尝试了sizeof()
和_msize()
,但它们不起作用,它们只是读取类型的大小。
【问题讨论】:
在此处粘贴代码,而不是图像。star
不是数组。
【参考方案1】:
star
是一个指向单个整数的指针。所以length
应该是1,由你来设置。 star[0]
可以,但 star[1]
会越界。对了,当你使用动态分配的时候,别忘了在最后加上delete star;
。
sizeof(star)
会给你指针的大小,而不是分配的元素数量。
如果你想知道动态大小,你必须自己去跟踪它:
size_t length = 15; // or any number you want
int *star = new int[length]; // this time you've allocated an array
...
delete[] star; // if you allocate an array, don't forget the []
另一种方法是使用完全动态的vector<int>
,可以根据需要增长,并在不再需要时处理释放:
vector<int> star; // empty vector created
...
star.push_back(i); // add an element
...
j=star.size(); // in fact you don't need j anymore
您可以像访问数组一样访问成员(例如 star[k])
【讨论】:
没有人知道长度有多长。如果输入为 3,则大小为 3。这就是我想要的,就像 C 中的 malloc 一样。我想做那个函数,那么我是否使用向量?【参考方案2】:您尚未将 star 声明为数组,而是单个整数。如果这样做的目的是找出“*”在您的文件中出现的次数,您应该创建一个整数int count = 0
,并在每次word[i] == '*'
时执行count++;
。
【讨论】:
那我用什么函数呢?我想在 C 中拥有像 malloc 一样的效果。 我确实喜欢。我想知道如何使用动态分配。以上是关于C++ 如何从动态分配中获取数组大小?的主要内容,如果未能解决你的问题,请参考以下文章