如何使用指针打印数组?

时间:2013-12-01 00:42:19

标签: c++ c arrays pointers

我有一个需要返回一个数组的函数,因为这是不可能的,而是返回指向该数组的指针。然后我需要在main函数中打印这个数组。我该怎么做?

这是我的意思的一个例子:

char* myFunction (void)
{

    char myArray[5] = {'one','two','three','four','five'};

return myArray;
}


int main(void)
{

    printf("%s",myFunction);

return 0;

}

但这只是打印指针:uF $。或者,如果我将函数打印为整数,则打印:791013。 那么我如何实际打印数组中的5个元素呢?

谢谢!

6 个答案:

答案 0 :(得分:6)

char* myFunction (void)
{
    char myArray[5] = {'one','two','three','four','five'}; // WRONG see 1 and 2
    return myArray; // WRONG see 3 
}

int main(void)
{
    printf("%s",myFunction); // WRONG see 4
    return 0;
}
  1. 字符串需要“”不是'(适用于个别字符)
  2. char foo [5]将是一个字符数组。字符串本身是字符数组,因此您需要char * foo [5]
  3. 你不能返回一个本地声明的数组(通常,你不能返回一个指向本地声明的数据的指针,因为它存在于堆栈中,并且一旦函数返回就无效)
  4. myFunction是一个函数,如果想要调用它,你需要()。但%s无论如何都不会起作用,因为%s用于打印字符串。你需要一个for循环遍历数组,然后用%d打印出整数。但是,由于这是C ++,你可能应该使用cout而不是printf(一个C std库函数)。

答案 1 :(得分:0)

正如Kerrek所指出的,这段代码有很多问题。其中两个是

1.您不能像这样声明char数组

 char myArray[5] = {'one','two','three','four','five'};  

2.您无法返回指向自动局部变量的指针,此处指针为myArray(衰减后)。这将调用未定义的行为

答案 2 :(得分:0)

在这个例子中,你不能打印数组,因为它根本就不是格式良好的字符串。

当然我们可以给你正确的答案,我们给你正确的代码片段,但我认为在这种情况下,了解C的基本元素会更有用。你可能需要阅读更多关于字符文字和字符串。预订Kernigan和Ritchie的C编程语言将为您提供更好的信息来源。您只需阅读第1章 - 教程简介,您就可以了解主要想法。

答案 3 :(得分:0)

当我写这段代码时,先生们已经回答了这个问题。您可以使用以下代码来完成。请注意,我没有释放内存。您必须释放字符串str [x]和str

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char** create_array();

int main(int argc, char** argv) {
    char** str = create_array();
    while (*str) {
        printf("%s\n", *str);
        ++str;
    }
    return (EXIT_SUCCESS);
}

char** create_array() {
    char** strings = (char**) malloc(sizeof (char*) * 6);
    strings[0] = strcpy(malloc(sizeof ("abc")), "abc");
    strings[1] = strcpy(malloc(sizeof ("two")), "two");
    strings[2] = strcpy(malloc(sizeof ("three")), "three");
    strings[3] = strcpy(malloc(sizeof ("four")), "four");
    strings[4] = strcpy(malloc(sizeof ("five")), "five");
    strings[5] = 0; //Ends the loop 
    return strings;
}

答案 4 :(得分:0)

你的数组中有声明错误char只有1个字符'@' 无论你能做什么都是

char myArray[5] = {'o','n','e',',','t','w','o',',','t','h','r','e','e',',','f','o','u','r',',','f','i','v','e'};

然而它只是不可读,我建议使用字符串 或者char ** myArray; 使数组关闭char数组:-B

       printf("%s",myFunction);

永远不会工作,因为c中的函数调用必须有() 固定:

     tempArray = myFunction();
     for (i=0;i<5;i++)
         printf("%c",tempArray[i]);

答案 5 :(得分:0)

string str_array[5] = { "one", "two", "three", "four", "five" };
string* pointer = &str_array[0];

for(int i=0; i<5; ++i)
    cout << *pointer++ << endl;

OR

#include <stdio.h>
#include <stdlib.h>

char** myFunction()
{
    char** myArray = (char**)malloc(sizeof(char*)*5);
    myArray[0] = "one";
    myArray[1] = "two";
    myArray[2] = "three";
    myArray[3] = "four";
    myArray[4] = "five";
    return myArray;
}

int main()
{
    char** result = myFunction();
    for(int i=0; i<5; i++)
        printf("%s\n", result[i]);

    free(result);

    system("PAUSE");
}