2016-03-08 50 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; 
相关问题