对不起该标题。我真的不知道如何定义这个问题。
我需要声明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;
}
答案 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 *ptr
或int 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;
}
}