c - 获取指向 char 指针的指针数组的地址

标签 c pointers

海湾合作委员会 4.4.3 c89

我正在尝试显示地址。基本上,我只是想证明我显示的地址是正确的。

我想显示每个指向 char 'device_gc', 'device_mg', 'device_cc' 的指针数组的地址

所以我在我的主要功能中显示它们。但是,在我的 display_list 函数中,我只是想证明我正在显示正确的地址。输出是一样的。

希望你明白?

非常感谢您的任何建议。

#include <stdio.h>

void display_list(char ***dev_list);

int main(void)
{
    char *device_gc[] = {"GCDEV01", "GCDEV02", "GCDEV03", "GCDEV04", "GCDEV05", "GCDEV06", NULL};
    char *device_mg[] = {"MGDEV01", "MGDEV02", "MGDEV03", "GCDEV05", NULL};
    char *device_cc[] = {"CCDEV01", "CCDEV02", "CCDEV03", "CCDEV04", "CCDEV05", NULL};

    char **device_list[] = {device_gc, device_mg, device_cc, NULL};

    printf("device_gc [ %p ]\n", (void*)*device_gc);
    printf("device_mg [ %p ]\n", (void*)*device_mg);
    printf("device_cc [ %p ]\n", (void*)*device_cc);

    display_list(device_list);

    return 0;
}

void display_list(char ***dev_list)
{
    while(**dev_list != NULL) {
        printf("dev [ %p ]\n", (void*)**dev_list++);
    }
}

期望的输出:

device_gc [ 0x80485e0 ]
device_mg [ 0x8048610 ]
device_cc [ 0x8048628 ]
dev [ 0x80485e0 ]
dev [ 0x8048610 ]
dev [ 0x8048628 ]

我得到的实际输出是不同的,有时会导致核心转储。这是为什么?

最佳答案

两个小调整。在打印 main() 中的值之前,您不应该取消引用 'device_gc' 等;你应该只在 display_list() 中使用一个取消引用:

#include <stdio.h>

void display_list(char ***dev_list);

int main(void)
{
    char *device_gc[] = {"GCDEV01", "GCDEV02", "GCDEV03", "GCDEV04", "GCDEV05", "GCDEV06", NULL};
    char *device_mg[] = {"MGDEV01", "MGDEV02", "MGDEV03", "GCDEV05", NULL};
    char *device_cc[] = {"CCDEV01", "CCDEV02", "CCDEV03", "CCDEV04", "CCDEV05", NULL};

    char **device_list[] = {device_gc, device_mg, device_cc, NULL};

    printf("device_gc [ %p ]\n", (void*)device_gc);
    printf("device_mg [ %p ]\n", (void*)device_mg);
    printf("device_cc [ %p ]\n", (void*)device_cc);

    display_list(device_list);

    return 0;
}

void display_list(char ***dev_list)
{
    while(*dev_list != NULL) {
        printf("dev [ %p ]\n", (void*)*dev_list++);
    }
}

关于c - 获取指向 char 指针的指针数组的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3614875/

相关文章:

c++ - opengl重新编译显示列表

c - C语言中 int* pn = &n 和 int pn = &n 有什么区别

c++ - 有没有办法提示用户使用什么数据类型作为模板 C++

c - 数组和指针表示法

c - 查找整数数组中的最小数字

c - 将文件读入结构体

c - 将数组分配给具有复杂情况的指针

c - 为什么C(16)中指针变量的大小是2字节?

c - C 中的 fork 和 waitpid

c - C 中的修剪函数