我正在解决一个恢复数组作业,在某个时候,代码被编译了,突然,在(显然不相关的)更改之后,代码无法再编译了。
这个可以编译
#include <iostream>
#define MAX 100
#define fori(x, y) for(int i = x; i<y; i++)
using namespace std;
int vetor[MAX];
void inverterElemento(int* a, int* b){
int* inverter;
*inverter = *a;
*a = *b;
*b = *inverter;
}
int main(){
for (int i = 0; i < MAX; i++){
vetor[i] = 7*i;
}
for (int k = 0; k <= MAX/2; k++){
int a = vetor[k];
int b = vetor[MAX-k-1];
inverterElemento(&vetor[k], &vetor[MAX - k - 1]);
}
fori(0, MAX) cout << vetor[i] << " "; cout << endl;
return 0;
}
此问题给出总线错误:10
问题:
#include <iostream>
#define MAX 100
#define fori(x, y) for(int i = x; i<y; i++)
using namespace std;
int vetor[MAX];
void inverterElemento(int* a, int* b){
int* inverter;
*inverter = *a;
*a = *b;
*b = *inverter;
}
int main(){
for (int i = 0; i < MAX; i++){
vetor[i] = 7*i;
}
for (int k = 0; k <= MAX/2; k++){
inverterElemento(&vetor[k], &vetor[MAX - k - 1]);
}
fori(0, MAX) cout << vetor[i] << " "; cout << endl;
return 0;
}
为什么这两行会改变结果?
int a = vetor[k];
int b = vetor[MAX-k-1];
最佳答案
在以下几行中:
int* inverter;
*inverter = *a;
inverter
被声明为一个指向 int
的指针,但没有它指向的初始地址(内容,即地址,未定义)。
应该是:
int inverter;
inverter = *a;
*a = *b;
*b = inverter;
关于c - 为什么在使用指针的函数中更改此数组的值是错误的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56249230/