首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是解释指向指针的必要性的好方法?

什么是解释指向指针的必要性的好方法?
EN

Software Engineering用户
提问于 2013-02-03 05:59:35
回答 4查看 749关注 0票数 6

理解什么是指针(地址)是相当容易的,一个十一岁的孩子可以理解它。但是我们如何表达为什么我们需要一个指向指针的指针呢?什么是非常教学的例子?它是否扩展到指向指针(和/或继续)的指针?

示例问题

Tundefined不衰减到T**

示例问题2

代码语言:javascript
复制
brainfuck command   C equivalent
(Program Start) char array[30000];
                char *ptr=array;
>   ++ptr;
<   --ptr;
+   ++*ptr;
-   --*ptr;
.   putchar(*ptr);
,   *ptr=getchar();
[   while (*ptr) {
]   }
EN

回答 4

Software Engineering用户

回答已采纳

发布于 2013-02-04 17:10:15

指针允许您讨论某些信息,而无需显式地指定该信息:

  • 位置0x007d32f8处的值。
  • 西大街105号的房子

指向指针的指针允许您讨论某物的位置,而无需显式地指定该位置:

  • 地址为0x012a0052
  • 我名片上的街道地址

指针的一种简单易懂、实用的用法是,当您希望其他函数或方法为您提供指向某个数据段的指针时。与其直接要求数据(毕竟,它可能非常大),你可以直接询问数据的地址。您可以这样说:这是我希望您更改的指针的地址,以便它指向我想要的数据。用街道地址类比,就像告诉你的朋友:

请在便笺上写上你的住址。

短语“此便笺垫”指定特定存储空间的位置,因此它就像一个指针。一旦地址被写下来,就像一个指向你朋友家的指针。

指向指针的另一个常见示例(在Brian的注释中指出)是多维数组。例如,在C中,字符串是以空结尾的字符数组,而字符串变量只是指向数组的第一个元素的指针。如果您想要构建一个字符串数组,您可以创建一个指针数组,每个指针指向一个不同的字符串。如果您想要一个二维的字符串数组,您可以重复这个过程并创建一个字符串数组。

能够谈论地址可以在代码和现实世界中使用更复杂的表达式。

票数 7
EN

Software Engineering用户

发布于 2013-02-03 06:22:28

有时被称为句柄,Windows和Mac使用这种结构允许堆上的内存压缩。程序管理指针p,操作系统管理指针*p。由于操作系统管理* p,所以可以移动p ( *p )所指向的块,并且*p可以更改以反映移动,而不使用p。指向指针的指针也经常在C中用于处理函数中的指针参数。

http://computer.howstuffworks.com/c32.htm

票数 7
EN

Software Engineering用户

发布于 2013-02-03 07:46:38

如果您有一个指针,并且您想要调用一个修改指针的函数,您需要告诉该函数指针存储在哪里。为了告诉函数的存储位置,需要获取指针的地址,它是指向指针的指针。

代码语言:javascript
复制
int foo(const char **error_message)
{
    if (!bar())
    {
        // The type of error_message is const char ** (the parameter)
        // The type of *error_message is const char * (the caller's msg)
        // The type of **error_message is const char ('N' from "No error")

        // Note here, I have a * before error_message, it changes the callers msg
        // *error_message is the caller's msg variable
        // reading or writing *error_message will read/write msg
        // before this line executes, msg points to the first character of "No error"
        // after this line, msg points first character of "bar failed"
        *error_message = "bar failed";
        return -2;
    }

    return 0;
}

int main()
{
    // make a variable 'msg' and point it to the first character of "No error"
    const char *msg = "No error";

    // Get the address of 'msg' and pass it to foo.
    // '&msg' is a pointer to 'msg' (which happens to be a pointer).
    int status = foo(&msg);

    // foo could have modified msg, since it knew the address of msg
    if (status < 0 && msg != 0)
       printf("%s\n", msg);
}

在我的示例中,调用方需要将指针传递给msg (指针指向指针),这样foo就可以将指针设置为指向错误消息。

这个想法和指针的任何使用都是一样的。如果您希望一段代码能够在任意地址上进行读写,则需要传递一个指针。指向指针的指针,只指向指针。

票数 4
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/185702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档