我正在調用一個函數,其原型是int foo(int device, double *x, double *y)
而我這樣稱呼它是這樣的foo(dev, (double*)x, (double*)y);
,其中x和y都是指向浮點數的指針。通過值傳遞的變量是否可以更改其值? (In C)
由於某些原因,設備正在以1的形式輸入函數並以隨機巨大值退出。
是可能的,因爲富處理雙打,我通過浮游物與他們的記憶混爲一談?
我正在調用一個函數,其原型是int foo(int device, double *x, double *y)
而我這樣稱呼它是這樣的foo(dev, (double*)x, (double*)y);
,其中x和y都是指向浮點數的指針。通過值傳遞的變量是否可以更改其值? (In C)
由於某些原因,設備正在以1的形式輸入函數並以隨機巨大值退出。
是可能的,因爲富處理雙打,我通過浮游物與他們的記憶混爲一談?
由於某些原因,設備進入函數1,並以隨機巨大值退出。
發生了什麼可能是差比。
你告訴你傳遞指針,比如說元件的系統,字節 - 但這些要素是規模僅次於字節。因此,被調用函數寫入其所接收指針的元素之一,實際上覆蓋了兩個元素(如果可用)。如果沒有元素可用於接收值...
這種事情會導致「未定義的行爲」 - 從字面上看,任何事情都可能發生(很少,程序甚至可以工作,並且沒有人知道爲什麼 - 所以「但它工作!「不應該保證)。
我懷疑你曾經在棧上分配的兩種開發和x作爲臨時變量:
float x[2];
int dev;
在這一點上,x的地址是在調用者的堆棧,哪裏還開發居住裏面指指點點。調用原型不匹配導致dev 的覆蓋以及誰知道還有什麼。 即使你沒有通過dev作爲參數,它也將被覆蓋所有相同的。
你沒有得到'x'和'y'的指針,你將它們轉換爲指針。 –
你所做的是告訴編譯器x和y指向浮動,這實際上是一個謊言。因此,C語言標準會說你的程序有「未定義的行爲」。它有可能做任何事情。 – Gene
使演員沉默編譯器警告可能會導致... –