我试图在将它们作为参数传递给函数的上下文中理解C中指针的行为,所以我尝试搞乱并做出以下测试用例:
void function1(int argument)
{
argument=4;
}
和
void function2(int* argument)
{
*argument=5;
}
如果我运行以下语句:
int var1;
int* var2;
function1(var1);
function1(*var2);
function2(&var1);
function2(var2);
在哪些情况下,变量的变化会反映在调用函数中? 我尝试运行以下示例代码但无法理解输出
#include <stdio.h>
void funone(int arg)
{
arg=5;
}
void funtwo(int* arg)
{
*arg=6;
}
int main(void) {
int var1=0;
int *var2;
var2=(int *)malloc(sizeof(int));
*var2=0;
funone(var1);
printf("%d",var1);
funone(*var2);
printf("%d",*var2);
funtwo(&var1);
printf("%d",var1);
funtwo(var2);
printf("%d",*var2);
return 0;
}
我得到的输出是
0066
这个输出有什么含义?
答案 0 :(得分:0)
这两个示例都不起作用,因为您只是使用这些函数设置指针的值。您将在下面找到一个可以实现您想要的行为的版本:
void function2(int* argument)
{
*argument=5;
}
argument
参数之前的星号的原因是因为您正在取消引用指针的值(您正在访问它),因此您可以在此时更改其值......
我希望这会有所帮助......
答案 1 :(得分:0)
function1
的代码更改了仅在函数中变量的值。因此,在功能之外没有任何改变的影响。
你的function2
有效(即更改它指向的值),因为指针可以指向其范围之外的变量。但是你的第一个函数将值保留在它的范围内,一旦函数返回,任何更改都会丢失。
这个解释应该出现在关于指针的任何好的教程中。