将指向字符的指针传递给函数

时间:2009-06-03 16:21:50

标签: c

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 个答案:

答案 0 :(得分: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循环,一次来自函数调用。

答案 1 :(得分: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);    
}