2013-06-05 34 views
-1

为什么修改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); 

} 
+3

请打开并读取编译器的警告。 – Mat

+0

(它不应该工作......)警告:从不兼容的指针类型传递'f'的arg 1 | –

+0

是的,请继续解决。 – Mat

回答

5

您指定的malloc结果的参数ptr,这是本地的。您应该将其分配到ptr指向

void f(int **ptr, int size, int value) 
{ 
    *ptr = (int*)malloc(sizeof(int) * size); 
    // Rest of code 
} 
+0

ptr是本地的吗?怎么样? –

+1

'ptr'是你函数的参数,所以它是一个局部变量。 –

+1

@PiotrWera:形式参数'ptr'是内存中与实际参数'vector'不同的一个对象,对'f'而言是局部的; 'f'中'ptr'的改变不会反映在'vector'中。您不需要写入'ptr',而需要写入'ptr' *指向*或'* ptr'的内容。你大部分都是在那里,但是你的函数原型中的'ptr'类型是错误的(应该是'int ** ptr',就像Matt所说的那样)。 –

相关问题