这是一个简单的程序来解释我的意思。给定长度 n,它初始化标准输入读取的 n 个整数序列。
int n, *seq, *current;
scanf("%d", &n);
seq = malloc(n*sizeof(int));
for (current = seq; current - seq < n; current++)
scanf("%d", current);
我的疑问是最后一个增量current
使它指向分配的内存之外的东西。显然,从该位置读取是错误的。但是如果我不读那个位置怎么办?
该程序运行正确,但我的问题是:这是一种标准且良好的做法,还是可能会引起麻烦并且应该避免的事情?
更新:那么将其附加到上一个程序的末尾呢?
for (current--; current - seq >= 0; current--)
printf("%d\n", *current);
根据@MOHAMED的回答,这是错误的,不是因为它是对无效位置的访问,而是因为current - seq >= 0
当指向第一个元素之前的一个位置时可能会给出错误的结果current
,因此具有未定义的值!