[英]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.