2009-06-03 57 views
2

C99傳遞一個指針指向字符到函數

我用一個指針的指針,並將其傳遞到一個函數來顯示名稱。

但是,當我通過調試器。指向參數中指針的指針指向無。但是,我正在使用它來顯示main中的所有名稱。

如果我傳遞一個整數,整數值將仍然存在。爲什麼不是指向指針的指針?

這是否與範圍有關或者是否需要使用malloc或calloc分配內存指針指針?

非常感謝您的任何建議,

#include <stdio.h> 

void display_names(char **first_names); 

int main(void) 
{ 
    char *names[] = {"peter", "Mary", "John", 0}; 
    char **print_names = names; 

    while(*print_names) 
    { 
     printf("Name: %s\n", *print_names); 
     *print_names++; 
    } 

    display_names(print_names); 

    getchar(); 

    return 0; 
} 

void display_names(char **first_names) 
{ 
    while(*first_names) 
    { 
     printf("First name: %s\n", *first_names); 
     first_names++; 
    } 
} 
+2

我剛纔似乎已經做了。我在while循環中增加了指針。所以現在指針指向null。 – ant2009 2009-06-03 16:24:51

回答

6

在你的while循環中,循環,直到print_names點什麼,然後你把它傳遞給display_names。在這一點上, * print_names == 0,取而代之的是while循環,嘗試:

char **print_names = names; 
while(*print_names) 
{ 
     printf("Name: %s\n", *print_names); 
     *print_names++; 
} 
print_names = names; 
display_names(print_names); 

這應該打印出兩倍的名字 - 從while循環一次,從一次函數調用。

+0

而不是聲明另一個指向指針的temp指針。這可能是在函數調用之前再次分配名稱的更好方法。 \t print_names = names; \t display_names(print_names); – ant2009 2009-06-03 16:28:33

0
char *names[] = {"peter", "Mary", "John", 0}; 
char **print_names; 

int main(void) 
{   
    print_names = &names[0]; // point to peter 
    while(*print_names) 
     printf("Name: %s\n", *(print_names++)); // last address in here is John 

    print_names = &names[0]; // reset point to peter before call display_names 
    display_names(print_names+0); // peter 
    display_names(print_names+1); // Mary 
    display_names(print_names+2); // John 

    getchar(); 
    return 0; 
} 

void display_names(char **names_selected) 
{ 
    printf("Name: %s\n", *names_selected);  
}