Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用c++;带int 0和'的数组\0'; 我使用C++整数数组(int *)。我已生成数字集并将其放入该数组中,例如1、0、3、4、5。此方法为数组分配了16个字符 int *arr = (int *)malloc(16)._C++_Arrays - Fatal编程技术网

如何使用c++;带int 0和'的数组\0'; 我使用C++整数数组(int *)。我已生成数字集并将其放入该数组中,例如1、0、3、4、5。此方法为数组分配了16个字符 int *arr = (int *)malloc(16).

如何使用c++;带int 0和'的数组\0'; 我使用C++整数数组(int *)。我已生成数字集并将其放入该数组中,例如1、0、3、4、5。此方法为数组分配了16个字符 int *arr = (int *)malloc(16).,c++,arrays,C++,Arrays,我需要能够循环这个数组,使用每个数字,并告诉数组中有多少个数字。为了遍历数组中的每个元素,我尝试了两种方法: for(int i=0;i<sizeof(arr);i++) and for(int i=0;arr[i]!='\0';i++). for(int i=0;i因为您对这个“数组”(内存块)使用了动态分配,所以类型系统不知道数组的维度。这意味着您不能使用sizeof(arr)。您所做的就是找到int*(指针)的大小 而且,正如您所发现的,尝试null终止这个数组是完全愚蠢的,因为

我需要能够循环这个数组,使用每个数字,并告诉数组中有多少个数字。为了遍历数组中的每个元素,我尝试了两种方法:

for(int i=0;i<sizeof(arr);i++) and for(int i=0;arr[i]!='\0';i++). 

for(int i=0;i因为您对这个“数组”(内存块)使用了动态分配,所以类型系统不知道数组的维度。这意味着您不能使用
sizeof(arr)
。您所做的就是找到
int*
(指针)的大小

而且,正如您所发现的,尝试null终止这个数组是完全愚蠢的,因为
0
是一个完全有效、正常的整数值

您应该执行以下操作之一:

选择1 选择3 如果值
16
不依赖于用户输入或其他运行时数据,请忽略动态分配:

std::array<int, 16> arr;
for (auto myInt : arr) {
   // ...
}
结论 很难说你想做什么,但我认为你正在尝试拥有一堆数组元素,不是所有的元素都可以在任何时候被“使用”,并以某种方式标记“未使用”的元素。在这种情况下,你想放弃那种老式的逻辑,使用上面的选项2a

便笺
我在这里使用了一些C++11结构,即
std::array
和ranged for循环。根据需要,用更传统的等价物替换循环。

sizeof
返回类型大小(以字节为单位),而不是数组的长度。因此,要使方法#1起作用,必须存储数组的长度。

se
countof
而不是
sizeof

template <typename T, size_t N> size_t countof( T (&array)[N] ){return N;}
模板大小\u t countof(t(&array)[N]){return N;}
我不知道它为什么会工作(我的意思是,如果我把它弄松了,我不知道怎么写),但我使用它(我会努力理解它-现在!)

我知道的另一种解释方法是使用
sizeof(arr)/sizeof(int)


尽可能避免使用“特殊情况”值。总会有问题出现。

已经有一些非常好的答案,但我只想添加一个丑陋的答案:

如果希望以写入方式显示数组的大小

int*arr=(int*)malloc(16);

大小取决于系统上整数的大小,例如每个整数可以有4个字节,因此最多可以容纳4个整数。为了跟踪分配的大小,您需要在分配的块中手动输入大小,例如

int n = 4;
int *arr = (int*)malloc((n+1)*sizeof(int)); 
*arr = 4;
然后移动指针

++arr;
需要尺寸时,请检查
*(arr-1)

释放块时,确保使用
free(arr-1)

也许最好用某种函数来包装它们,以隐藏其丑陋之处


<>我不推荐这个方法,因为你在C++中编程,避免<代码> MalC/Cube <代码>,因为它们不是非常兼容C++,即他们对构造函数一无所知,而是使用<代码>新/新[]/Dele/Dele][]
还有
vector
是我最喜欢的模板之一,一旦你知道如何使用数组,那就很容易了。

int*
不是数组。它是指针。
第一个方法的问题是sizeof返回16
不,它不返回。你到底想解决什么问题?实例化
int并在其上循环真的没有那么复杂。@LightnessRacesinOrbit如何?这为我创建了一个可用的数组。这也是我最初的想法,但它为我创建了一个数组。我上面提到的方法似乎与int-arr的工作方式相同[16]问题是,你没有完全学习指针和数组,或者你没有用编程知识、逻辑和常识来思考问题。你需要阅读一本好的C++入门书籍或教程,尤其是它的章节(s),它覆盖了指针和数组。你确定<代码> siZeof(ARR)吗?
给出的是
16
?我认为通常是4或8,因为
arr
是一个指针。而且,你混淆了“整数槽”对于字节--16字节只给您四个整数的插槽,假设为4字节整数。我不想循环遍历数组中的所有元素,只遍历那些不为空的元素。有没有办法停止遍历空的元素?我想知道有多少元素不为空。@InsertNameHere:您必须遍历它们,否则您不会知道你需要定义你所说的“null”是什么意思。我认为你来自Java背景,在Java背景中,对象可以有值,也可以是“null”,但这里不是这样。哈哈,不,实际上我主要是做Objective C,但Java也是这样。我说null的意思是我还没有给它设置一个值。@InsertNameHere:然后你试图将数组元素填充到最大数量,并以某种方式“标记”未使用的元素。与此相反,请使用上面的我的选项2a,它只是根据需要扩展数组,不留下任何“未使用”的元素。唯一的替代方法是选择一个哨兵值(例如,
-1
)并坚持使用。@InsertNameHere:Good:)
int arr[16];
for (auto myInt : arr) {
   // ...
}
template <typename T, size_t N> size_t countof( T (&array)[N] ){return N;}
int n = 4;
int *arr = (int*)malloc((n+1)*sizeof(int)); 
*arr = 4;
++arr;