gpt4 book ai didi

有人能解释一下指针的指针是如何工作的吗?

转载 作者:行者123 更新时间:2023-12-02 03:41:14 25 4
gpt4 key购买 nike

我不太明白指向指针的指针是如何工作的。有没有办法在不使用指针到指针的情况下完成相同的工作?

struct customer
{
char name[20];
char surname[20];
int code;
float money;
};
typedef struct customer customer;
void inserts(customer **tmp)
{
*tmp = (customer *)malloc(sizeof(customer));
puts("Give me a customer name, surname code and money");
scanf("%s %s %d %f", (*tmp)->name, (*tmp)->surname, &(*tmp)->code, &(*tmp)->money);
}

最佳答案

指向指针101的指针

假设您有一个int变量x :int x;

  • 一部分内存将分配给x大到足以容纳int .
  • 分配给 x 的内存在进程内存映射中有一个地址。
  • 查看 x 所在的地址位于内存中,使用:
    printf("x's memory address = %p\n", (void*)&x);
  • &x表示 x 的地址.
  • 查看 x 中存储的整数值,使用:
    printf("x=%d\n", x);
  • x 只能在其存在范围内直接进行操作。例如,可以在声明它的函数内对其进行操作:
    x = 42;
  • x 的值超出其定义范围如果已知其内存地址,则可以对其进行操作。
  • 如果 x 的值(即:42)传递给函数( x ),该函数无法操作 x 的值.
  • 如果地址 x被传递给一个函数( &x ),该函数可以操作 x 的值.

现在,假设您有一个指针变量 p假设它指向 int :int *p;

  • 一部分内存将分配给p足够大以容纳内存地址。
  • 分配给 p 的内存在进程内存映射中有一个地址。
  • &p意味着 address of
  • 查看 p 所在的地址位于内存中,使用:
    printf("p's memory addr = %p\n", &p);
  • 查看 p 所在的地址指向,使用:
    printf("Address where <code>p</code> is pointing: %p\n", p);
  • 要查看所指向的整数,请使用:
    printf("int = %d\n", *p);
  • p 的值是内存中的地址;和p可以设置为指向任何地址,无论该地址是否实际存在于进程内存映射中。
  • 对象的地址是指向该对象的指针。因此,导致p指向x :
    p = &x
  • 随便p所指向的可以通过指针类型引用( p 类型为 int )。
  • 分配给p的内存量会有所不同,具体取决于机器的架构;以及它如何表示地址。
  • p 只能在其存在范围内直接进行操作。例如,可以在声明它的函数内对其进行操作:
    p = &x;p = NULL
  • 在其存在范围之外, p 的值如果其内存地址已知,则可以对其进行操作。
  • 如果 p 的值(地址)被传递给函数( p ),该函数无法操作 'p' 来更改它指向的位置。
  • 如果地址 p被传递给一个函数( &p ),该函数可以操作 p指向。

现在,假设您有一个指向指针变量 pp 的指针假设它指向一个指向“int”的指针:int **pp; ...或:void inserts(customer **tmp) :

  • 指针的地址是指向指针的指针。
  • ...

enter image description here

回到问题

问:有什么方法可以在不使用指针到指针的情况下完成相同的工作吗?

没有。假设如下:

void inserts(customer **tmp);

...
{
customer cust;
custPtr custPtr = &cust;

inserts(&custPtr);
...

inserts()函数需要指针的地址才能操作 where custPtr点。

如果改为:

void inserts2(customer *tmp);

...
{
customer cust;
custPtr custPtr = &cust;

inserts2(custPtr);
...

insert2()将获得 custPtr 值的副本,这是cust的地址。因此,insert2()可以修改 cust 的值,但无法更改 custPtr 的位置正在指向。

关于有人能解释一下指针的指针是如何工作的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23963269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com