我對現在正在使用的另一個程序員的C程序的行爲有些困惑。我無法理解的是以下幾點:當在C中調用函數時,是否應該給變量賦予一個新地址?
1)一個變量定義這樣
typedef float (array3d_i)[3];
array3d_i d_i[NMAX];
2)一旦某值assgined所有d_i的,一個函數被調用是這樣的:
void calc(elem3d_i d_element);
其從主使用稱爲:
calc(d_i[i]);
在一個循環
。
當d_i在main中初始化時,每個元素都會在內存中獲取一個地址,我猜測是在堆棧中或其他地方。當我們調用函數「calc」時,我期望在函數內部創建一個變量的副本,並放在更新的地址中。但是我調試了程序,我可以看到在函數「calc」中,變量「d_elemt」在main中獲得的地址與d_i相同。
這是正常與否?
我甚至更困惑,因爲後來有調用另一個函數,除非現在的變量是浮點類型,並且它們的數組被初始化,而且在函數內部,變量被賦予不同的地址比主要的還要多。
這怎麼可能?爲什麼區別?代碼或調試器是否奇怪?
謝謝
在第二種情況下,它是否是一個浮點數組? – 2010-09-21 10:29:16
是的,它是一個花車陣列 – flow 2010-09-21 10:29:44
'd_i'是'array3d_i'的數組。 'array3d_i'是一個由3個浮點數組成的數組......所以'd_i'是一個由3個浮點數組成的數組。 – pmg 2010-09-21 10:35:13