2017-03-03 24 views
0

我試圖改變某個變量的使用函數的地址,但我不知道這樣做的方法。不過這是我去:如何用函數更改變量的地址?

void address (int* x, int* y) 
{ 
    x = y; 
} 

int main(void) 
{ 
    int x = 2; 
    int y = 4; 

    address(&x, &y); 
    printf("%d", x); 

    return 0; 
} 
+3

你想做什麼?讓'x'和'y'在同一個地址? – yano

+0

@yano。看起來他試圖改變地址而不移動變量:) –

+2

你是什麼意思「改變地址」?地址是物理屬性的抽象。你可以做些什麼來改變它的措辭。請更清楚一點。 –

回答

2

我懷疑你想

void address (int* x, int* y) 
{ 
    *x = *y; 
} 

即使您的問題的措辭很差。

如果我誤解了,並且您確實希望能夠更改變量的地址,則不能。變量的地址不是附加到可以更改的變量的一條信息。變量的地址是的變量。它的名字只是人類的便利。

更多的答案

x和y的主要是在說0x1234的整數和0x1236然後調用你的函數。它碰巧有兩個叫做x和y的參數,這些參數與main和x和y沒有真正的關聯。這些參數指向整數,包含2個整數的地址。在你的情況下,主線'x和y。

我將調用main x和y main.x和main.y.我將調用函數x和y func.x和func.y

所以func.x = 0x1234和func.y = 0x1236。你可以做任何你這些喜歡,你做

func.x = func.y 

OK所以現在func.x的原始值將丟失,它有func.y.的價值兩者現在都有main.y的地址。好吧,這並不改變main.x的任何方面main.y周圍

雜耍球不改變它們指向的東西,它只是使它們指向不同的事情

這樣想。在C程序

int x 

方式分配這就是4個字節長的一個變量,並記住它的地址給我,我將把該地址爲「X」。在程序設計(舊舊的彙編程序等)的非常早期的日子裏,你將不得不編寫說

thing at 0x1234 = 42; 
thing at 0x1236 = thing at 0x1234 + 2; 

等。(你沒居然說「件事」你有一些CPU特定的指令,但其同樣的事情) ,這是編譯器的主要工作之一,允許你調用內存'count_of_mice'或'size_of_planet',因爲它的真正的硬讀碼只有數字

+0

我不知道...當我調試,並輸入功能「地址」,我可以在表窗口中看到下的「本地人」是 X = 0x28ff18 Y = 0x28ff18 所以它的工作原理,但不是當我回到我的主要功能。我希望這個改變能夠繼續到我的主要功能。可能嗎? –

+0

@JohnDale我已經達到並且滿足回答 – pm100

+0

好的,謝謝,所以我們只是改變你的例子中的指針吧? –

2

我想改變使用函數的某個變量的地址

答案是:你不能。正如評論中指出的那樣,the address is an abstraction of a physical property。變量在內存中佔據空間,只有一個變量可以佔用一個給定的空間(在今天存在的體系結構上)。

如果你的意思是你想改變兩個保存地址的變量(也稱爲pointers)的值來保存不同的值,你的變量將需要聲明爲指針,你的函數將需要接受指針 - 以三分球。例如:

void address (int** x, int** y) 
{ 
    *x = *y; 
} 

int main(void) 
{ 
    int x = 2; 
    int y = 4; 

    int *px = &x; // px points to x 
    int *py = &y; // py points to y 

    address(&px, &py); 
    printf("%d", px); 

    return 0; 
} 
+0

謝謝這是我一直在尋找! :) –

0

變量的地址是其標識特徵之一。你不能改變變量的地址,只能改變1的值。

或者這裏有另外一個比喻:假設我在一張紙條上寫下我的街道地址,「99 JB Lane」,然後給它給你。您可以使用該紙幫助您訪問我的房子。你甚至可以選擇改變我的房子,比如說耙葉。現在假設你在紙上塗上了「99」,並用「42」代替。你不是那樣改變我的實際門牌號碼,也不能讓我的房子和我的鄰居家成爲同一個房子。如果「42 JB Lane」碰巧是一個有效的地址,那麼你可以使用紙來訪問那裏的房子。

函數address()接收到的參數值就像我給你的紙條:它們告訴函數在哪裏找到兩個變量的值,甚至使它能夠修改這些值,但函數不能用它們來更改其值存儲在這些地址的變量的標識