簡體   English   中英

將指向字符的指針傳遞給函數

[英]Passing a pointer to pointer to character into a function

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++;
    }
}

在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循環和一次從函數調用。

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);    
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM