我知道 c 总是按值传递,但是如果我有一个指针:
int i = 4;
int * p;
p = &i;
那么我有一个函数,如何将指针传递p
给它并更改变量的值i
?
void changeValue(int *p)
{
}
如何传递指针并更改指向的变量p
?
我知道 c 总是按值传递,但是如果我有一个指针:
int i = 4;
int * p;
p = &i;
那么我有一个函数,如何将指针传递p
给它并更改变量的值i
?
void changeValue(int *p)
{
}
如何传递指针并更改指向的变量p
?
只需调用changeValue
as
changeValue(p);
并通过为ini
赋值来更改它 ( ) 指向的变量的值*p
changeValue()
void changeValue(int *p)
{
*p = an int value;
}
这个简单的例子展示了如何传递一个指针(即不是一个值)并通过该指针接收整数持有的新值。请注意变量数量的减少。即没有必要创建一个单独的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
。
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 ;
}
int i = 4;
int * p = &i;
changeValue(p);
printf("%d",*p);
void changeValue(int *p)
{
*p = 5;
}
完整程序 - http://ideone.com/DCvhxE
如果您取消引用指针changeValue
并分配给它,它将改变i
调用框架中的值。
例如:
void changeValue(int *p)
{
*p = 0;
}