将指针传递给函数是';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; }

将指针传递给函数是';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=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\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()中,然后需要传递指针的地址,在函数内部取消引用,并增加此取消引用的结果。注意:没有通过引用传递