将指针传递给函数是';nt在C中通过引用传递? #包括 int func(int*); 内部主(空) { INTA=3; int*p=NULL; p=&a; printf(“p=%p\n”,p); func(p); printf(“p inc:%p\n”,p); 返回0; } int func(int*p) { p++; 返回0; }
输出:p=0x7fff6f87e89c p公司:0x7fff6f87e89c将指针传递给函数是';nt在C中通过引用传递? #包括 int func(int*); 内部主(空) { INTA=3; int*p=NULL; p=&a; printf(“p=%p\n”,p); func(p); printf(“p inc:%p\n”,p); 返回0; } int func(int*p) { p++; 返回0; },c,pointers,pass-by-reference,C,Pointers,Pass By Reference,输出:p=0x7fff6f87e89c p公司:0x7fff6f87e89c 指针p传递给函数func,指针p在func中递增,但在主函数中其地址仍然相同!!将指针传递给函数不是按引用传递?增加指针,而不是值 像这样试试 #include<stdio.h> int func(int*); int main(void) { int a = 3; int *p = NULL; p = &a; printf("p =
指针p传递给函数func,指针p在func中递增,但在主函数中其地址仍然相同!!将指针传递给函数不是按引用传递?增加指针,而不是值 像这样试试
#include<stdio.h>
int func(int*);
int main(void)
{
int a = 3;
int *p = NULL;
p = &a;
printf("p = %p\n", p);
func(p);
printf("p inc: %p\n", p);
return 0;
}
int func(int *p)
{
p++;
return 0;
}
printf("p inc: %d\n", *p);
及
你需要理解指针。指针只是一个变量,它存储数据实际所在的内存地址。您可以使用解引用操作符*
访问数据,因此如果您想更改数据,只需解引用指针,然后修改数据即可
同样,对于打印,您希望看到数据的值
在代码中,只修改指针。在c语言中,总是按值传递,指针本身的副本是在func()
函数中创建的,最初它与原始指针的地址相同,但由于它是一个副本,因此它只会影响本地副本中的地址
更进一步,因为它指向堆栈上的一个变量。对它的增量操作将导致无法取消引用的指针,因为它是未定义的行为
如果要增加指针的地址,需要向指针传递一个指针,如下所示
#include<stdio.h>
int func(int*);
int main(void)
{
int a = 3;
int *p = NULL;
p = &a;
printf("p = %p\n", p);
func(p);
printf("p inc: %p\n", p);
return 0;
}
int func(int *p)
{
p++;
return 0;
}
printf("p inc: %d\n", *p);
大体上
void func(int **p)
{
(*p)++;
}
请注意,
func()
的主体是相同的,因为您需要再次访问p
指向的内存才能对其进行修改。您增加的是指针,而不是值
像这样试试
#include<stdio.h>
int func(int*);
int main(void)
{
int a = 3;
int *p = NULL;
p = &a;
printf("p = %p\n", p);
func(p);
printf("p inc: %p\n", p);
return 0;
}
int func(int *p)
{
p++;
return 0;
}
printf("p inc: %d\n", *p);
及
你需要理解指针。指针只是一个变量,它存储数据实际所在的内存地址。您可以使用解引用操作符*
访问数据,因此如果您想更改数据,只需解引用指针,然后修改数据即可
同样,对于打印,您希望看到数据的值
在代码中,只修改指针。在c语言中,总是按值传递,指针本身的副本是在func()
函数中创建的,最初它与原始指针的地址相同,但由于它是一个副本,因此它只会影响本地副本中的地址
更进一步,因为它指向堆栈上的一个变量。对它的增量操作将导致无法取消引用的指针,因为它是未定义的行为
如果要增加指针的地址,需要向指针传递一个指针,如下所示
#include<stdio.h>
int func(int*);
int main(void)
{
int a = 3;
int *p = NULL;
p = &a;
printf("p = %p\n", p);
func(p);
printf("p inc: %p\n", p);
return 0;
}
int func(int *p)
{
p++;
return 0;
}
printf("p inc: %d\n", *p);
大体上
void func(int **p)
{
(*p)++;
}
请注意,
func()
的主体是相同的,因为您需要再次访问p
指向的内存才能对其进行修改。在C中没有按引用传递。当您传递指向函数的指针时,您是按值传递内存地址
在函数内部执行以下操作时:
func(&p);
…您只是将参数p
指示的内存地址增加sizeof*p
字节
为了在C中通过引用“模拟”通道,您需要显式取消引用指针以访问实际对象。如果p
是正确分配且有效的指针,则*p
是它指向的对象。如果使用非指针表达式,请执行以下操作:
int func(int *p)
{
p++;
return 0;
}
…然后使用p==&a
它将变成:
a = a + 1;
…或者干脆
(*p)+
。请注意,括号是必需的,否则,C将把它理解为*(p++)
。您还可以习惯于编写++*p
。在C中没有按引用传递。当您传递指向函数的指针时,您是按值传递内存地址
当在函数内部执行以下操作时:
func(&p);
…您只是将参数p
指示的内存地址增加sizeof*p
字节
为了在C中通过引用“模拟”通道,您需要显式取消引用指针以访问实际对象。如果p
是正确分配且有效的指针,则*p
是它指向的对象。如果使用非指针表达式,请执行以下操作:
int func(int *p)
{
p++;
return 0;
}
…然后使用p==&a
它将变成:
a = a + 1;
…或者干脆
(*p)+
。请注意,括号是必需的,否则,C将把它理解为*(p++)
。您也可以习惯于编写+*p
。指针是按值传递的。如果要通过引用传递指针,只需传递指针的指针 像这样:
*p = *p + 1;
#包括
int func(int**);
内部主(空)
{
INTA=3;
int*p=NULL;
p=&a;
printf(“p=%p\n”,p);
func&p;
printf(“p inc:%p\n”,p);
返回0;
}
int func(int**p)
{
(*p)++;
返回0;
}
指针按值传递。如果要通过引用传递指针,只需传递指针的指针 像这样:
*p = *p + 1;
#包括
int func(int**);
内部主(空)
{
INTA=3;
int*p=NULL;
p=&a;
printf(“p=%p\n”,p);
func&p;
printf(“p inc:%p\n”,p);
返回0;
}
int func(int**p)
{
(*p)++;
返回0;
}
注意:c中没有传递引用。是否要递增main
的a
或main
的p
?我只想检查指针的地址,我正在递增函数func()中指针的地址,要检查它是否反映在main()中,然后需要传递指针的地址,在函数内部取消引用,并增加此取消引用的结果。注意:没有通过引用传递