2010-09-01 3 views
1

gcc 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 ] 

Фактический выход я получаю разные, и иногда приводит к дамп. Почему это?

+0

Пожалуйста, укажите ваш вопрос четко – Sundar

ответ

2

Две небольшие хитрости. Вы не должны разыгрывать «device_gc» и т. Д. Перед печатью значения в main(); Вы должны использовать только один разыменования в 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++); 
    } 
} 
+0

Спасибо, за вашу помощь. – ant2009

Смежные вопросы