簡體   English   中英

將地址傳遞給C中的函數

[英]Passing addresses to functions in C

我是C的新手,我有一個計算一些變量的函數。 但是現在讓我們簡化一下。 我想要的是擁有一個“返回”多個變量的函數。 雖然據我所知,你只能在C中返回一個變量。所以我被告知你可以傳遞一個變量的地址並按這樣做。 這是我走了多遠,我想知道我可以伸出援助之手。 關於C90禁止的東西,我得到了一些錯誤。我幾乎是肯定的,這是我的語法。

說這是我的主要功能:

void func(int*, int*);

int main()
{
    int x, y;
    func(&x, &y);

    printf("Value of x is: %d\n", x);
    printf("Value of y is: %d\n", y);

    return 0;
}

void func(int* x, int* y)
{
    x = 5;
    y = 5;
}

這基本上就是我正在使用的結構。 有人能幫我一把嗎?

您應該使用*variable來引用指針指向的內容:

*x = 5;
*y = 5;

目前,什么你正在做的是設置指針,以解決5.你可以逃脫蹩腳的老編譯器,但一個好的編譯器會在指定的檢測類型不匹配intint*變量,不會讓你做無顯性演員。

void function(int *x, int* y) {
    *x = 5; 
    *y = 5; 
}

會改變參數的值。

除了其他海報為您的函數體建議的更改之外,將原型更改為void func(int *,int *) ,並更改函數定義(在main下面)以反映void。 如果未指定返回類型,編譯器會認為您試圖暗示返回int。

當實際上它是func(int *,int *)時,你不能轉發聲明func(int,int)。 而且,func的返回類型應該是什么? 由於它不使用return,我建議使用void func(int *,int *)。

您可以返回結構類型的單個變量。

#include <stdio.h>
#include <string.h>

struct Multi {
  int anint;
  double adouble;
  char astring[200];
};

struct Multi fxfoo(int parm) {
  struct Multi retval = {0};
  if (parm != 0) {
    retval.anint = parm;
    retval.adouble = parm;
    retval.astring[0] = parm;
  }
  return retval;
}

int main(void) {
  struct Multi xx;
  if (fxfoo(0).adouble <= 0) printf("ok\n");
  xx = fxfoo(42);
  if (strcmp(xx.astring, "\x2a") == 0) printf("ok\n");
  return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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