了解指针和内存地址

问题描述 投票:0回答:2
#include<stdio.h>

int g(int *a, int *b);

int main()
{
    int a = 2;
    int b = 7;

    b = g(&b , &a);

    printf("a = %d\n", a);
    printf("b = %d\n", b);

    return 0;
}

int g(int *a, int *b)
{
    (*a) = (*a) + 3;
    (*b) = 2*(*a) - (*b)+5;

    printf("a = %d, b = %d\n", *a, *b);

    return (*a)+(*b);
}

输出为:

a = 10, b = 23
a = 23
b = 33

我正在学习C编程入门,并且在理解其工作原理时遇到困难?感谢您的帮助!

c pointers memory-address
2个回答
0
投票

通过使用*,您可以访问指针引用的对象。当指针引用int变量a和b时,您需要对这些变量进行操作。我认为相同的变量名称使您感到困惑

int g(int *p1, int *p2)
{
    (*p1) = (*p1) + 3;
    (*p2) = 2*(*p1) - (*p2)+5;

    printf("*p1 = %d, *p2 = %d\n", *p1, *p2);

    return (*p1)+(*p2);
}

0
投票

使用'&',您将变量的地址提供给函数,而不是值。使用“ *”,您可以指定地址的值。

使用b = g(&b , &a);,将变量b和a的地址提供给函数。但是您可以使用'* a'访问b的地址,因为您以这种方式声明了该函数:int g (int * a, int * b)* a指向b变量的地址。* b指向变量的地址。

我认为让您感到困惑的是不同的变量名。

为了使您自己更轻松,您可以将声明更改为int g (int * b, int * a)如果您想更改它* b将指向b变量的地址,并且* a会指向您变量的地址。

© www.soinside.com 2019 - 2024. All rights reserved.