C 为什么在这个简单的例子中传递一个简单的指针不起作用
为什么修改ptr没有效果 关于向量? 我试图通过f函数来改变值C 为什么在这个简单的例子中传递一个简单的指针不起作用,c,pointers,void-pointers,C,Pointers,Void Pointers,为什么修改ptr没有效果 关于向量? 我试图通过f函数来改变值 void f(int *ptr, int size, int value){ ptr=(int* )malloc(sizeof(int)); if(ptr!=NULL){ int i; for(i=0;i<size;i++) *(ptr + i) = value; } } int main (void) { int *vector
void f(int *ptr, int size, int value){
ptr=(int* )malloc(sizeof(int));
if(ptr!=NULL){
int i;
for(i=0;i<size;i++)
*(ptr + i) = value;
}
}
int main (void)
{
int *vector = NULL;
f(&vector, 3, 324);
printf("%p\n", vector);
}
void f(int*ptr,int大小,int值){
ptr=(int*)malloc(sizeof(int));
如果(ptr!=NULL){
int i;
对于(i=0;i您正在将malloc
的结果分配给本地参数ptr
。您应该将其分配给ptr指向的对象
void f(int **ptr, int size, int value)
{
*ptr = (int*)malloc(sizeof(int) * size);
// Rest of code
}
请打开并阅读编译器的警告。(无论如何它都不应该工作…)警告:从不兼容的指针类型传递'f'的arg 1 |是的,请继续并修复它。ptr
是函数的一个参数,因此它是一个局部变量。@PiotrWera:formal参数ptr
是内存中与实际参数vector
不同的对象,并且是f
的局部对象;对f
中的ptr
不会反映在vector
中。您不需要写入ptr
,而需要写入ptr
所指向的内容,或者*ptr
。您大部分都是这样做的,但是您的函数原型中的ptr
类型错误(应该是int**ptr
,如马特所示)。除此之外,他只为单个int分配空间,然后尝试将多个int放在那里。