C 从int';在将函数指针传递到数组后

C 从int';在将函数指针传递到数组后,c,C,我试图从类型为int的数组中获取值,但我不知道我做错了什么。 函数得到两个指针,一个指向数组,另一个指向int变量,我希望函数用数组中的值更改另一个变量(“balance”是变量的名称)。函数如下所示: int Buy(int *balance, int *prices){ int item=0; printf("\nPlease enter product number to commit purchase: "); scanf("%d", &item);

我试图从类型为
int
的数组中获取值,但我不知道我做错了什么。 函数得到两个指针,一个指向数组,另一个指向int变量,我希望函数用数组中的值更改另一个变量(“balance”是变量的名称)。函数如下所示:

int Buy(int *balance, int *prices){
    int item=0;
    printf("\nPlease enter product number to commit purchase: ");
    scanf("%d", &item);
    *balance -= *(prices+item);
    return 1;
}
void main( int argc, char *argv[]){

    int *ptr_to_prices, *ptr_to_balance;
    int balance = atoi(argv[2]);
    ptr_to_balance = &balance;

    Init(argv[1], balance);
    ptr_to_prices = displayProducts(atoi(argv[2]));
    Buy(ptr_to_balance, ptr_to_prices);
}
主要功能如下所示:

int Buy(int *balance, int *prices){
    int item=0;
    printf("\nPlease enter product number to commit purchase: ");
    scanf("%d", &item);
    *balance -= *(prices+item);
    return 1;
}
void main( int argc, char *argv[]){

    int *ptr_to_prices, *ptr_to_balance;
    int balance = atoi(argv[2]);
    ptr_to_balance = &balance;

    Init(argv[1], balance);
    ptr_to_prices = displayProducts(atoi(argv[2]));
    Buy(ptr_to_balance, ptr_to_prices);
}
总之,我需要
Buy
函数来获取我初始化程序时使用的余额值,并从中减去
prices[item]
的值

谢谢

更新: 这是displayProducts():


我认为,你需要改变

printf("%d\n", prices+item);

由于
%d
需要
int
参数。要打印指针,需要使用
%p

也就是说,如果没有正确提供命令行arg,直接使用
argv[n]
而不检查
argc
可能会导致不稳定的行为,从而导致分段错误


编辑:


这里的问题是,您正在从
displayProducts()
返回自动局部变量(数组)
prices
的地址。使用返回值将导致。

我认为,您需要更改

printf("%d\n", prices+item);

由于
%d
需要
int
参数。要打印指针,需要使用
%p

也就是说,如果没有正确提供命令行arg,直接使用
argv[n]
而不检查
argc
可能会导致不稳定的行为,从而导致分段错误


编辑:


这里的问题是,您正在从
displayProducts()
返回自动局部变量(数组)
prices
的地址。使用返回值将导致。

我认为,您需要更改

printf("%d\n", prices+item);

由于
%d
需要
int
参数。要打印指针,需要使用
%p

也就是说,如果没有正确提供命令行arg,直接使用
argv[n]
而不检查
argc
可能会导致不稳定的行为,从而导致分段错误


编辑:


这里的问题是,您正在从
displayProducts()
返回自动局部变量(数组)
prices
的地址。使用返回值将导致。

我认为,您需要更改

printf("%d\n", prices+item);

由于
%d
需要
int
参数。要打印指针,需要使用
%p

也就是说,如果没有正确提供命令行arg,直接使用
argv[n]
而不检查
argc
可能会导致不稳定的行为,从而导致分段错误


编辑:


这里的问题是,您正在从
displayProducts()
返回自动局部变量(数组)
prices
的地址。使用返回值将导致。

Post
displayProducts()
。这里可能存在内存分配问题。另外,如果您能描述您看到的问题,这将非常有用。Post
displayProducts()
。这里可能存在内存分配问题。另外,如果您能描述您看到的问题,这将非常有用。Post
displayProducts()
。这里可能存在内存分配问题。另外,如果您能描述您看到的问题,这将非常有用。Post
displayProducts()
。这里可能存在内存分配问题。另外,如果您能描述您看到的问题,这会很有帮助。另外,
prices[item]
可能更直观。printf(“%d\n”,prices+item)用于调试目的。你可以看到下面的一行,我按照你的建议使用了它,所以我不明白为什么我要把这一行添加到main的末尾<代码>printf(“%d”,*(ptr_至_价格+1))我从数组中获得了正确的值..?另外,
prices[item]
可能更直观。
printf(“%d\n”,prices+item)用于调试目的。你可以看到下面的一行,我按照你的建议使用了它,所以我不明白为什么我要把这一行添加到main的末尾<代码>printf(“%d”,*(ptr_至_价格+1))我从数组中获得了正确的值..?另外,
prices[item]
可能更直观。
printf(“%d\n”,prices+item)用于调试目的。你可以看到下面的一行,我按照你的建议使用了它,所以我不明白为什么我要把这一行添加到main的末尾<代码>printf(“%d”,*(ptr_至_价格+1))我从数组中获得了正确的值..?另外,
prices[item]
可能更直观。
printf(“%d\n”,prices+item)用于调试目的。你可以看到下面的一行,我按照你的建议使用了它,所以我不明白为什么我要把这一行添加到main的末尾<代码>printf(“%d”,*(ptr_至_价格+1))我从数组中获取正确的值。。?