c - 带数组的指针算术
问题描述
我正在尝试用 C 编写一个简单的程序,将元素存储在指针中。当我打印数组的元素时,我得到了垃圾值。
这是代码:
#include <stdio.h>
#include <stdlib.h>
#define MAX 5
int main(int argc, char const *argv[]) {
int* a = (int*)malloc(MAX * sizeof(int));
int* b = NULL;
int* const maxAddress = a + MAX;
if(a != NULL) {
for(int index = 0; b = a, b < maxAddress; index++) {
*(a + index) = index;
printf("Value: %d, Index: %d\n", *(a + index), index);
a++;
}
}
printf("\n\n");
for(int index = 0; index < MAX; index++) // Getting junk values here
printf("Index: %d, Value: %d, Address: %p\n", index, *(a + index), a + index);
return 0;
}
解决方案
你有两个独立的增量正在进行。在 for 循环中执行index++
,而在循环结束时递增a++
。这意味着您的第一个写入是 to a[0]
,您的下一个是 toa[1 + 1]
等等。基本上,您正在跳过所有其他元素。
为了避免这样做增量a
或index
,但不是两者兼而有之。由于您希望 的值index
不断提高,因此我建议删除该行a++
.
该变量b
只在循环开始时才使用,因此条件b = a, b < maxAddress
似乎毫无意义。可以写成a < maxAddress
。如果我有这样的猜测,b
则在更完整的代码版本中使用以保留a
下一次迭代的先前值。
推荐阅读
- sql - Postgresql 使用子字符串排序
- python - 如何将python2升级到python3?
- javascript - setTimeout 和状态集函数之间的奇怪交互
- python - Python3切片负停止和负步骤
- javascript - Typescript/React 单元测试库,能够单步调试导入的函数
- javascript - 没有颜色混合的 createLinearGradient
- python - Pandas 删除某些行的多个条件,条件包含 NaT
- python - 如何使用 OpenCV 测量齿轮的尺寸
- javascript - 如何使用javascript用超链接替换单词?
- javascript - ReactJS OnClick 函数在选定日期上呈现日期