2016-03-08 51 views
-1

我做了一個方法,接收一個int *,這個值將被賦值給另一個int *。 當我調用該方法時,我輸入一個整數,但收到轉換錯誤。如何使用C中的方法將int分配給int *?

我嘗試使用(int *)強制轉換int,但程序崩潰。

add(hashTable, 8, 0); 

void add(hash_table *hashTable, int *num, int value) 

如何在一個方法中爲int *賦一個整數值?

+6

'int my_int = 8;添加(hashTable,&my_int,0);' – kaylum

+2

歡迎使用堆棧溢出。請儘快閱讀[關於]頁面。看到你的代碼崩潰會很有幫助;你投什麼?這聽起來有點像你有一個[XY問題](http://mywiki.wooledge.org/XyProblem) - 你真的想要做什麼?如果你想傳遞一個'int',你爲什麼要讓這個方法接受'int *'?你期望取消引用包含8的int *和訪問地址8的值嗎?如果是這樣,那麼在大多數通用PC上都會失敗,儘管在嵌入式系統上您可能會(但可能不會)。 –

回答

1

首先,您應該瞭解int *的含義。這意味着你在內存中有一個int,而不是將該int的值複製到一個函數中,而是傳入該變量的地址。在第一次有變量之前,您不能傳入變量的地址。所以簡單的解決方案是創建一個變量併爲該變量提供所需的值。然後你可以傳入該變量的地址。

int n = 8; 
add(hashTable, &n, 0); 
0

int's是整數值,int *是指向整數的指針。換句話說,int *是內存中指向你的整數的位置。爲了將int分配給int *,需要將int放入int *指向的內存位置。要做到這一點,你只需把整在內存位置指向INT *(假設內存已經分配)

int *my_pointer = (int *)malloc(sizeof(int)); // allocate memory 
*my_pointer = my_val; 

(你必須在這裏分配內存,否則會崩潰)

int my_val = 8; // the memory is allocated here, so you are safe 
int *my_pointer = &my_val; 
相關問題