1

我知道 c 总是按值传递,但是如果我有一个指针:

int  i = 4;
int * p;
p = &i;

那么我有一个函数,如何将指针传递p给它并更改变量的值i

void changeValue(int *p)
{
}

如何传递指针并更改指向的变量p

4

5 回答 5

2

只需调用changeValueas

changeValue(p);  

并通过为ini赋值来更改它 ( ) 指向的变量的值*pchangeValue()

void changeValue(int *p)  
{
     *p = an int value;
}
于 2013-10-21T14:11:16.033 回答
2

这个简单的例子展示了如何传递一个指针(即不是一个值)并通过该指针接收整数持有的新值。请注意变量数量的减少。即没有必要创建一个单独的int *p;. 在这种情况下也没有必要将 p: 初始化 p = &i;为 i 的地址。

int changeValue(int *);
int main(void)
{
    int i=15;
    changeValue(&i);
    return 0;
}

int changeValue(int *p) //prototyped to accept int *
{
    return *p = 3;  
}

如果您确实想首先创建一个指针并传递该指针,那么:

int changeValue(int *);
int main(void)
{
    int i=15;
    int *p;
    p = &i;
    *p; // *p == 15 at this point
    //since p is already a pointer, just pass
    //it as is
    changeValue(p);
    return 0;
}

int changeValue(int *q) //prototyped to accept int *
{
    return *q = 3;  
}

重要的是要注意您的陈述:I know the c always pass by values不正确。将函数编写成传递指针更为常见,因为通常指针更小,并且比实际变量更有效地传递,尤其是在使用大型数组或结构时。请记住,如果需要传递指针,传递&i(i 的地址)与传递一样有效p

于 2013-10-21T14:42:06.187 回答
2
void changeValue( int* ) ;

int main( void )
{
    int  i = 4; // Suppose i is stored at address 1000h
    int * p;    
    p = &i;     // Now p stores the address of i that is 1000h

    changeValue(p); // Can also be written as changeValue(&i);
    // Here you are passing the address of i to changeValue function

    return 0 ;
}

void changeValue( int* p ) // Accept a parameter of type int*
{
    *p = 100 ; // store the value 100 at address 1000h
    return ;
}
于 2013-10-21T14:19:25.650 回答
1
int  i = 4;
int * p = &i;
changeValue(p);
printf("%d",*p);

void changeValue(int *p)
{
    *p = 5;
}

完整程序 - http://ideone.com/DCvhxE

于 2013-10-21T14:11:13.080 回答
1

如果您取消引用指针changeValue并分配给它,它将改变i调用框架中的值。

例如:

void changeValue(int *p)
{
    *p = 0;
}
于 2013-10-21T14:12:06.330 回答