C 为什么在这个简单的例子中传递一个简单的指针不起作用

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

为什么修改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 = 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放在那里。