[英]Why my pointer code is giving me wrong output in C?
為什么我的指針代碼給我錯誤的輸出?
在哪里,我的實際代碼是:
void fun1(int *x, int *y){
*x = 50;
*y = 100;
fun2(&x, &y);
printf("%d %d ", x, y);
}
void fun2(int *x, int *y){
*x = 6;
*y = 7;
}
void main()
{
int x = 5;
int y = 10;
fun1(&x, &y);
printf("%d %d",x,y);
}
我的預期輸出是這樣的:6 7 6 7
它給我這樣的輸出:6 7 50 100
謝謝。
在fun1
,表達式&x
是指向該指針的指針 。 類型為int **
。
您不應該在此處使用address-of運算符,因為x
和y
已經是指針。
讓編譯器警告您的一種簡單方法是在使用函數之前先聲明fun2
函數:
// Declare fun2 prototype
void fun2(int *x, int *y);
void fun1(int *x, int *y)
{
...
}
// Define fun2 implementation
void fun2(int *x, int *y)
{
...
}
void fun2(int*, int*)
,必須聲明或定義它 printf("%d %d ", x, y);
fun1
,行printf("%d %d ", x, y);
應該是printf("%d %d ", *x, *y);
,因為x
和y
是int*
fun1
函數中, fun2(&x, &y);
應該是fun2(x, y);
x
和y
為int*
以下code
可以工作:
#include <stdio.h>
void fun2(int *x, int *y){
*x = 6;
*y = 7;
}
void fun1(int *x, int *y){
*x = 50;
*y = 100;
fun2(x, y);
printf("%d %d\n", *x, *y);
}
int main()
{
int x = 5;
int y = 10;
fun1(&x, &y);
printf("%d %d\n",x,y);
return 0;
}
Method 1. Point To Point To Int
void fun1(int *x, int *y){
*x = 50;
*y = 100;
fun2(&x, &y);
printf("%d %d ", *x, *y);
}
void fun2(int **x, int **y){
**x = 6;
**y = 7;
}
void main()
{
int x = 5;
int y = 10;
fun1(&x, &y);
printf("%d %d",x,y);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.