簡體   English   中英

為什么我的指針代碼在C語言中給我錯誤的輸出?

[英]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運算符,因為xy已經是指針。

讓編譯器警告您的一種簡單方法是在使用函數之前先聲明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)
{
    ...
}
  1. 在使用void fun2(int*, int*) ,必須聲明或定義它
  2. 在funx printf("%d %d ", x, y); fun1 ,行printf("%d %d ", x, y); 應該是printf("%d %d ", *x, *y); ,因為xyint*
  3. fun1函數中, fun2(&x, &y); 應該是fun2(x, y); xyint*

以下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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM