c - 为什么在使用指针的函数中更改此数组的值是错误的?

标签 c arrays function pointers reference

我正在解决一个恢复数组作业,在某个时候,代码被编译了,突然,在(显然不相关的)更改之后,代码无法再编译了。

这个可以编译

#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/

相关文章:

c - 整数除法的行为是什么?

arrays - Rust 中的闭包数组

javascript - 为bracket.js制作一个插入函数

c - 初始化返回变量时,读取缓冲区清零

c - 在C中初始化一个结构表

c - 无法读入文件——C

javascript - MongoDB 仅返回其他文档中的用户与字段不匹配的文档

c# - 比较出错 c# Dictionary<String, string[]>

json - 调用函数将 Json 从 View Controller 解析到其他 View

c++ - 如何使这个函数递归