2017-07-13 104 views
0

它可能在C中處理PHP中的變量變量。這裏是我的一個PHP文檔示例。沒有類型說明符的參數

http://php.net/manual/en/language.variables.variable.php

我願做這樣的事情,讓我的代碼一些抽象。

int value1; 
int value2; 
int value3; 

function handle_value(variable_var) { 
    scanf("%i", &variable_var); 
} 

這是怎麼工作的,但我想獲得更少的代碼...

int value1; 
int value2; 
int value3; 
scanf("%i", &value1); 
scanf("%i", &value2); 
scanf("%i", &value3); 
+0

你有沒有在問之前閱讀過'scanf'? –

+0

只需使用數組?我不確定我完全理解你的問題,但如果是關於動態變量的話,他們很少使用它。將數組用於變量由數字變化的變量,或對於變量以其他方式變化的Map來使用。 – Carcigenicate

+0

數組和循環:'int val [3]; for(int j = 0; j <3; j ++)scanf(「%d」,val + j);' – pmg

回答

4

不,C不處理可變的變量,比如在PHP。

-1

您可以使用X macro來實現您提到的內容。

只是這樣做:

#define LIST_OF_VARIABLES X(value1) X(value2) X(value3) 


//Declaring the variables 

#define X(name) int name; 
LIST_OF_VARIABLES 
#undef X 



//Reading values into the variables 

#define X(name) scanf("%i", &name); 
LIST_OF_VARIABLES 
#undef X 



//Printing the values 

#define X(name) printf("\n%i", name); 
LIST_OF_VARIABLES 
#undef X 


首先,我們定義一個宏LIST_OF_VARIABLES這將調用另一個宏X
我們保持LIST_OF_VARIABLES的方式,因爲它會一遍又一遍地被使用。

接下來我們定義在LIST_OF_VARIABLES正文中使用的宏X
這第二個宏是我們修改以適應我們需要的宏。我們首先用#undef取消定義它,然後重新定義它#define

上面的代碼將被第一最終擴大LIST_OF_VARIABLES宏之後,如下所示:

//Declaring the variables 

#define X(name) int name; 
X(value1) X(value2) X(value3) 
#undef X 



//Reading values into the variables 

#define X(name) scanf("%i", &name); 
X(value1) X(value2) X(value3) 
#undef X 



//Printing the values 

#define X(name) printf("\n%i", name); 
X(value1) X(value2) X(value3) 
#undef X 



然後X()宏每次擴張之後,C pre-processor將最終得到以下的(這將被編譯器使用):

//Declaring the variables 

int value1; int value2; int value3; 



//Reading values into the variables 

scanf("%i", &value1); scanf("%i", &value2); scanf("%i", &value3); 



//Printing the values 

printf("\n%i", value1); printf("\n%i", value2); printf("\n%i", value3); 

這是你想要的輸出。

-1

變量變量與示例中的指針類似。所以你可以做這樣的事情。

int value1; 
int value2; 
int value3; 

void handle_value(int * var) { 
    scanf("%i", var); 
} 

int main(void) { 
    handle_value(&value1); 
    handle_value(&value2); 
    handle_value(&value3); 
}