我不確定這是否適合這種論壇,因爲它是一個非常具體的問題,但我仍然會問。C:在不同的功能中操作結構
我有三個文件:
main.c
functions.c
functions.h
在functions.c
和functions.h
我創建了一個struct
,並把它定義爲一個名爲control
類型:
typedef struct
{
char cUp, cLeft, cDown, cRight
} control;
我創建的control
一個實例,並右在main.c
開始初始化稱爲Keys
實例:
#include <stdio.h>
#include <stdlib.h>
#include "functions.h"
int main()
{
control Keys = {'w', 'a', 's', 'd'};
//...
}
我通過Keys
到一個名爲options_f
功能,這需要一個control
作爲它的參數和返回一個control
。函數原型放在functions.h
:
//in functions.h:
control options_f(control Keys);
//in main.c:
Keys = options_f(Keys);
options_f
位於functions.c
,看起來像這樣:
control options_f(control Keys)
{
system("cls");
printf("\nENTER | Place your symbol.\n\n1| %c |Move up.\n\n2| %c |Move left.\n\n3| %c |Move down.\n\n4| %c |Move right.\n", Keys.cUp, Keys.cLeft, Keys.cDown, Keys.cRight);
printf("\n\nTo change the keys: NUMBER,SYMBOL (enter 0 to return to menu).\n\n");
int iTemp = 0;
char cTemp = '\0';
scanf("%i,%c", &iTemp, &cTemp);
switch(iTemp)
{
case 0:
break;
case 1:
Keys.cUp = cTemp;
Keys = options_f(Keys);
break;
case 2:
Keys.cLeft = cTemp;
Keys = options_f(Keys);
break;
case 3:
Keys.cDown = cTemp;
Keys = options_f(Keys);
break;
case 4:
Keys.cRight = cTemp;
Keys = options_f(Keys);
break;
default:
printf("Please enter a number from 1-4.");
stop_f(2);
options_f(Keys);
break;
}
}
該功能可以讓我改變Keys
字符的內容。在輸入0
並返回菜單後,我再次調用options_f
。只有它將存儲在Keys
的字符中的值更改爲某些垃圾值。
這是爲什麼?
如果您需要更多關於我使用的其他功能的信息,請詢問。
對不起,如果這看起來很低級別和愚蠢的,但我想學習,這就是爲什麼我問。
謝謝:)
只需將'Keys'作爲指針傳入即可。 'void options_f(control * keys){...}'並將它稱爲'options_f(&Keys);' – clcto
除了速度之外,將它作爲指針傳遞還有什麼好處嗎? –
這只是邏輯上的差異。使用'control options_f(控制鍵)'讀取(對我)作爲'options_f' _uses_'keys'來創建一個新的'control',而'void options_f(control * keys)'更多地讀取'options_f'修改'keys'。 – clcto