使用void函数

时间:2016-11-17 19:57:50

标签: c arrays function pointers void

对不起该标题。我真的不知道如何定义这个问题。

我需要声明N个数字的整数数组,并用void函数中的随机数字填充它。那个数组需要在main中打印。问题是我不允许在void函数中使用printf所以只有在main中打印的方法是使用指针我猜。我的知识是有限的,因为我是指针初学者。提前做好并抱歉英语不好。

到目前为止,这是我的代码。当我编译它时标记分段错误。

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

void form();

int main()
{

    int N, a[100];

    printf("Input index: \n");
    scanf("%d", &N);

    form(N, &a);

    printf("Array: \n");

    for (int i = 0; i < N; i++) {
        printf("a[%d] = %d", i, a[i]);
    }

}


void form(int N, int *ptr[100])
{

    srand(time(NULL));

    for (int i = 0; i < N; i++) {
        *ptr[i] = rand() % 46;

    }

3 个答案:

答案 0 :(得分:0)

所以有几件事:

void form();

正如奥拉夫所暗示的那样,这个声明是不正确的 - 你错过了适用的参数。相反,它应该是

void form(int N, int ptr[100]);

程序崩溃的主要原因是由于以下行:

*ptr[i] = rand() % 46;

你正在取消引用i的指针,它正在给你一个数字 - 你想要的是在新的随机值上指定指针的值:

ptr[i] = rand() % 46;

作为相关阅读,请参阅此question关于将数组作为函数参数传递(基本上,int ptr[]int * ptr相同)

答案 1 :(得分:0)

您的代码中存在多个问题。

1)您的数组解封form()已过时。使用适当的原型。

2)对于声明VLA,在读取N后声明它,而不是使用固定大小的数组。

3)当传递给函数时,数组被转换为指向其第一个元素的指针。请参阅:What is array decaying?

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

void form(int, int*); /* see (1) */

int main(void) /* Standard complaint prototype for main. 
                 If you need to pass arguments you can use argc, and argv */
{
    int N;

    printf("Input size: \n");
    scanf("%d", &N);

    int a[N];   /* see (2) */
    form(N, a); /* see (3) */
    printf("Array: \n");

    for (int i = 0; i < N; i++) {
        printf("a[%d] = %d", i, a[i]);
    }
}


void form(int N, int *ptr) { /* Modified to match the prototype
    srand(time(NULL));

    for (int i = 0; i < N; i++) {
        ptr[i] = rand() % 46;

    }
}

答案 2 :(得分:-1)

对您的代码进行小修改:

1)在函数调用时校正和简化参数处理。只需移交“a”,它就是一个数组,因此它是一个地址,您可以在形式参数列表中使用int *ptrint ptr[]int ptr[100]。所以你可以在你的函数中使用简单的ptr [i]。

2)从提供参数列表的旧式声明中创建函数原型。

for循环之前的

3)int i;声明 - 不是强制性的,取决于你的编译器标准

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

void form(int N, int *ptr);

int main()
{

    int N, a[100];

    printf("Input index: \n");
    scanf("%d", &N);

    form(N, a);

    printf("Array: \n");
    int i;
    for (i = 0; i < N; i++) {
        printf("a[%d] = %d", i, a[i]);
    }

}


void form(int N, int *ptr)
{

    srand(time(NULL));
    int i;
    for (i = 0; i < N; i++) {
        ptr[i] = rand() % 46;

    }
}