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
的地址。使用返回值将导致。PostdisplayProducts()
。这里可能存在内存分配问题。另外,如果您能描述您看到的问题,这将非常有用。PostdisplayProducts()
。这里可能存在内存分配问题。另外,如果您能描述您看到的问题,这将非常有用。PostdisplayProducts()
。这里可能存在内存分配问题。另外,如果您能描述您看到的问题,这将非常有用。PostdisplayProducts()
。这里可能存在内存分配问题。另外,如果您能描述您看到的问题,这会很有帮助。另外,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))代码>我从数组中获取正确的值。。?