[英]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.你可以逃脫蹩腳的老編譯器,但一個好的編譯器會在指定的檢測類型不匹配int
到int*
變量,不會讓你做無顯性演員。
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.