使用 c while 循环遍历所有整数数组元素
Looping all integer array elements using c while loop
>我正在尝试使用指针循环整数数组,但我得到一个奇怪的值。
int nums[1] = { 1 };
int *p = nums;
while(*p != NULL) {
cout << " LOOPING, p is " << *p << endl;
p++;
}
当我运行时,我得到下一个输出:
LOOPING, p is 1
LOOPING, p is -858993460
LOOPING, p is 4454504
LOOPING, p is 3032019
为什么我会得到这些奇怪的价值观?我应该只看到"1",因为我一直在循环,直到我得到 NULL 指针,并且在每个循环中我移动下一个指针。
while(*p != NULL) {
比较是错误的,原因有二:
-
*p
是一个整数,而不是NULL
暗示的指针 - 数组不是以 0 结尾的,所以即使
NULL
被视为花哨的 0,它也不会起作用
你可以试试:
int nums[] = {1, 0};
while(*p)
你正在超越数组的边界并查看垃圾值。您的数组大小为 1,包含 1
.因此,同时的条件没有得到满足(或者在某些时候它纯粹是偶然的)。
你的条件是错误的,指针在数组的末尾不会为 NULL,所以正在发生的事情是你超出了数组边界。
此外,使用指针上的*
获取它指向的内存中的值。因此,在您的情况下*p
意味着"取 p 指向的值"。
其他答案已经涵盖了为什么你的代码不起作用 - 只是想添加另一个循环选项:
int main()
{
int nums[] = { 1, 5, 7 };
int *pEnd = nums + sizeof(nums)/sizeof(int) - 1; // point to last element
int *p = nums;
while(p <= pEnd) {
cout << " LOOPING, p is " << *(p++) << endl;
}
return 0;
}
int GetSize(int a[]){
int ptr=0;
while(a[ptr]!= NULL){
ptr++;
}
return --ptr;
}
同时您可以尝试以下代码:
int nums[] = {1, 0};
int *p = nums;
while(*p){
cout << *p;
p++;
}
请注意,如果您决定在零之后向数组中添加更多数字,则在迭代时将无法识别它们。
nums[] = {1, 0, 1, 2}
只会返回
1
对于 int 数组,我们可以将指针变量指向该数组的最后一个的方法是这样做。x = base_address + sizeof(arr)/sizeof(int) -1;"-1"用于添加两倍的基址。所以如果我们这样做p = x;p 将指向数组的结束元素。
这就像按索引访问数组元素一样。
相关文章:
- 数组元素打印的递归方法
- 从二进制文件中读取整数数组
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 新的整数数组向右移动?
- C++ 中的二维整数数组,每行中的元素数量不均匀
- 整数指针数组的元素是否可以指向整数数组?
- " ans += (a[i] - ans * r > 0); "是什么意思,其中 ans,r 是整数,a[i] 是数组元素?
- 将数字的字符串数组转换为整数数组时,元素将变为 0
- 整数数组元素,前导 0 表示垃圾输出
- 如何在C 中获取整数数组的元素
- 整数数组中的元素数量不等于其大小
- c++ sort() 函数对于<algorithm>整数数组的大小(元素数)>10^7 个元素的大输入是否失败?
- 对一个包含 100 个元素的整数数组进行排序,其中只有 3 个元素
- 使用 c while 循环遍历所有整数数组元素
- 给定一个整数数组 A(20).将 Min 元素放在数组的开头
- 打印排序的整数数组元素
- 在整数数组中查找一对元素,使abs(v[i]-v[j])最小化
- 在c++中,整数数组之间可以有空元素吗?
- 在未排序的整数数组中找到最小元素的速度小于0 (n)
- 如何将 void 类型的元素转换为整数数组类型