C 如何使用指针通过调用的函数在main中编辑数组

C 如何使用指针通过调用的函数在main中编辑数组,c,arrays,pointers,prng,C,Arrays,Pointers,Prng,我试图使用我自己编写的一个随机数生成器函数,但我想在main函数中调用rng,并让它将生成的数字保存到main中的两个数组中。我假设我必须向rng()传递某种指针;让它编辑主目录中的数组?如何实际格式化该指针?不允许使用字符串或全局数组 所以我想用一个指针代替r[I],这样函数就可以编辑main中的数组,而不是函数中的数组 do{ printf("\nthis is the row number\n\n"); for ( i = 0; i < 11; i++){ r[i] = rand(

我试图使用我自己编写的一个随机数生成器函数,但我想在main函数中调用rng,并让它将生成的数字保存到main中的两个数组中。我假设我必须向rng()传递某种指针;让它编辑主目录中的数组?如何实际格式化该指针?不允许使用字符串或全局数组

所以我想用一个指针代替r[I],这样函数就可以编辑main中的数组,而不是函数中的数组

do{
printf("\nthis is the row number\n\n");
for ( i = 0; i < 11; i++){
 r[i] = rand()%8;
 printf("%d\n", r[i]);
}

printf("\nthis is the column number\n\n");
for ( i = 0; i < 11; i++){
c[i] = rand()%8;
printf("%d\n", c[i]);
}
整个代码如下所示

#include <stdio.h>
#include "stdlib.h"
#include "time.h"
int * rng( ){
int x;
int *t;
x=1;
t=&x;
int y;
int *g;
y=1;
g=&y;
static int  r[11];
static int  c[11];
int i;
int j;
srand(time( NULL ) );

do{
printf("\nthis is the row number\n\n");
for ( i = 0; i < 11; i++){
r[i] = rand()%8;
printf("%d\n", r[i]);
}

printf("\nthis is the column number\n\n");
for ( i = 0; i < 11; i++){
c[i] = rand()%8;
printf("%d\n", c[i]);
}

for (i=0; i<11; i++){
for(j= i+1 ;j<11;j++){
if ((r[i]+1)*(r[i]+1)*(c[i]+1)==(r[j]+1)*(r[j]+1)*(c[j]+1)){
printf("\nOops duplicate number, recalculating\n");
*t=2;
*g=2;
printf("%i", *t);
printf("%i", *g);

}
if (((r[0]+1)*(r[0]+1)*(c[0]+1)!=(r[1]+1)*(r[1]+1)*(c[1]+1))&&
((r[0]+1)*(r[0]+1)*(c[0]+1)!=(r[2]+1)*(r[2]+1)*(c[2]+1))&&
((r[0]+1)*(r[0]+1)*(c[0]+1)!=(r[3]+1)*(r[3]+1)*(c[3]+1))&&
((r[0]+1)*(r[0]+1)*(c[0]+1)!=(r[4]+1)*(r[4]+1)*(c[4]+1))&&
((r[0]+1)*(r[0]+1)*(c[0]+1)!=(r[5]+1)*(r[5]+1)*(c[5]+1))&& 
((r[0]+1)*(r[0]+1)*(c[0]+1)!=(r[6]+1)*(r[6]+1)*(c[6]+1))&&
((r[0]+1)*(r[0]+1)*(c[0]+1)!=(r[7]+1)*(r[7]+1)*(c[7]+1))&&
((r[0]+1)*(r[0]+1)*(c[0]+1)!=(r[8]+1)*(r[8]+1)*(c[8]+1))&&
((r[0]+1)*(r[0]+1)*(c[0]+1)!=(r[9]+1)*(r[9]+1)*(c[9]+1))&&
((r[0]+1)*(r[0]+1)*(c[0]+1)!=(r[10]+1)*(r[10]+1)*(c[10]+1))&&

((r[1]+1)*(r[1]+1)*(c[1]+1)!=(r[2]+1)*(r[2]+1)*(c[2]+1))&&
((r[1]+1)*(r[1]+1)*(c[1]+1)!=(r[3]+1)*(r[3]+1)*(c[3]+1))&&
((r[1]+1)*(r[1]+1)*(c[1]+1)!=(r[4]+1)*(r[4]+1)*(c[4]+1))&&
((r[1]+1)*(r[1]+1)*(c[1]+1)!=(r[5]+1)*(r[5]+1)*(c[5]+1))&&
((r[1]+1)*(r[1]+1)*(c[1]+1)!=(r[6]+1)*(r[6]+1)*(c[6]+1))&&
((r[1]+1)*(r[1]+1)*(c[1]+1)!=(r[7]+1)*(r[7]+1)*(c[7]+1))&&
((r[1]+1)*(r[1]+1)*(c[1]+1)!=(r[8]+1)*(r[8]+1)*(c[8]+1))&&
((r[1]+1)*(r[1]+1)*(c[1]+1)!=(r[9]+1)*(r[9]+1)*(c[9]+1))&&
((r[1]+1)*(r[1]+1)*(c[1]+1)!=(r[10]+1)*(r[10]+1)*(c[10]+1))&&

((r[2]+1)*(r[2]+1)*(c[2]+1)!=(r[3]+1)*(r[3]+1)*(c[3]+1))&&
((r[2]+1)*(r[2]+1)*(c[2]+1)!=(r[4]+1)*(r[4]+1)*(c[4]+1))&&
((r[2]+1)*(r[2]+1)*(c[2]+1)!=(r[5]+1)*(r[5]+1)*(c[5]+1))&&
((r[2]+1)*(r[2]+1)*(c[2]+1)!=(r[6]+1)*(r[6]+1)*(c[6]+1))&&
((r[2]+1)*(r[2]+1)*(c[2]+1)!=(r[7]+1)*(r[7]+1)*(c[7]+1))&&
((r[2]+1)*(r[2]+1)*(c[2]+1)!=(r[8]+1)*(r[8]+1)*(c[8]+1))&&
((r[2]+1)*(r[2]+1)*(c[2]+1)!=(r[9]+1)*(r[9]+1)*(c[9]+1))&&
((r[2]+1)*(r[2]+1)*(c[2]+1)!=(r[10]+1)*(r[10]+1)*(c[10]+1))&&

((r[3]+1)*(r[3]+1)*(c[3]+1)!=(r[4]+1)*(r[4]+1)*(c[4]+1))&&
((r[3]+1)*(r[3]+1)*(c[3]+1)!=(r[5]+1)*(r[5]+1)*(c[5]+1))&&
((r[3]+1)*(r[3]+1)*(c[3]+1)!=(r[6]+1)*(r[6]+1)*(c[6]+1))&&
((r[3]+1)*(r[3]+1)*(c[3]+1)!=(r[7]+1)*(r[7]+1)*(c[7]+1))&&
((r[3]+1)*(r[3]+1)*(c[3]+1)!=(r[8]+1)*(r[8]+1)*(c[8]+1))&&
((r[3]+1)*(r[3]+1)*(c[3]+1)!=(r[9]+1)*(r[9]+1)*(c[9]+1))&&
((r[3]+1)*(r[3]+1)*(c[3]+1)!=(r[10]+1)*(r[10]+1)*(c[10]+1))&&

((r[4]+1)*(r[4]+1)*(c[4]+1)!=(r[5]+1)*(r[5]+1)*(c[5]+1))&&
((r[4]+1)*(r[4]+1)*(c[4]+1)!=(r[6]+1)*(r[6]+1)*(c[6]+1))&&
((r[4]+1)*(r[4]+1)*(c[4]+1)!=(r[7]+1)*(r[7]+1)*(c[7]+1))&&
((r[4]+1)*(r[4]+1)*(c[4]+1)!=(r[8]+1)*(r[8]+1)*(c[8]+1))&&
((r[4]+1)*(r[4]+1)*(c[4]+1)!=(r[9]+1)*(r[9]+1)*(c[9]+1))&&
((r[4]+1)*(r[4]+1)*(c[4]+1)!=(r[10]+1)*(r[10]+1)*(c[10]+1))&&

((r[5]+1)*(r[5]+1)*(c[5]+1)!=(r[6]+1)*(r[6]+1)*(c[6]+1))&&
((r[5]+1)*(r[5]+1)*(c[5]+1)!=(r[7]+1)*(r[7]+1)*(c[7]+1))&&
((r[5]+1)*(r[5]+1)*(c[5]+1)!=(r[8]+1)*(r[8]+1)*(c[8]+1))&&
((r[5]+1)*(r[5]+1)*(c[5]+1)!=(r[9]+1)*(r[9]+1)*(c[9]+1))&&
((r[5]+1)*(r[5]+1)*(c[5]+1)!=(r[10]+1)*(r[10]+1)*(c[10]+1))&&

((r[6]+1)*(r[6]+1)*(c[6]+1)!=(r[7]+1)*(r[7]+1)*(c[7]+1))&&
((r[6]+1)*(r[6]+1)*(c[6]+1)!=(r[8]+1)*(r[8]+1)*(c[8]+1))&&
((r[6]+1)*(r[6]+1)*(c[6]+1)!=(r[9]+1)*(r[9]+1)*(c[9]+1))&&
((r[6]+1)*(r[6]+1)*(c[6]+1)!=(r[10]+1)*(r[10]+1)*(c[10]+1))&&

((r[7]+1)*(r[7]+1)*(c[7]+1)!=(r[8]+1)*(r[8]+1)*(c[8]+1))&&
((r[7]+1)*(r[7]+1)*(c[7]+1)!=(r[9]+1)*(r[9]+1)*(c[9]+1))&&
((r[7]+1)*(r[7]+1)*(c[7]+1)!=(r[10]+1)*(r[10]+1)*(c[10]+1))&&

((r[8]+1)*(r[8]+1)*(c[8]+1)!=(r[9]+1)*(r[9]+1)*(c[9]+1))&&
((r[8]+1)*(r[8]+1)*(c[8]+1)!=(r[10]+1)*(r[10]+1)*(c[10]+1))&&

((r[9]+1)*(r[9]+1)*(c[9]+1)!=(r[10]+1)*(r[10]+1)*(c[10]+1))){
printf("\nno errors\n");
*t=2;
*g=1;
printf("%i", *t);
printf("%i", *g);
break;
}
}
}
}while(*t==*g);

}




int main (){

int map[8][8];
int row[11];
int column[11];
//int *p;
int i;
// p = row[];
rng(row, column);
#包括
#包括“stdlib.h”
#包括“time.h”
int*rng(){
int x;
int*t;
x=1;
t=&x;
int-y;
int*g;
y=1;
g=&y;
静态int r[11];
静态int c[11];
int i;
int j;
srand(时间(空));
做{
printf(“\n这是行号\n\n”);
对于(i=0;i<11;i++){
r[i]=rand()%8;
printf(“%d\n”,r[i]);
}
printf(“\n这是列编号\n\n”);
对于(i=0;i<11;i++){
c[i]=rand()%8;
printf(“%d\n”,c[i]);
}

对于(i=0;i而不是在rng()函数中本地声明r和c,只需通过引用将行和列传递给rng(行,列)

rng (int* row, int* column){

}
void rng(int*r,int*c){
...
做{
printf(“\n这是行号\n\n”);
对于(i=0;i<11;i++){
r[i]=rand()%8;
printf(“%d\n”,r[i]);
}
printf(“\n这是列编号\n\n”);
对于(i=0;i<11;i++){
c[i]=rand()%8;
printf(“%d\n”,c[i]);
}
...
int main(){
int行[11];
int列[11];
rng(行、列);
...

这就是我要做的,我的问题是如何真正做到这一点,因为每当我试图将行[]传递到rng()时它说它没有在rng或其他什么东西中定义。这似乎是最好的方法。虽然很粗糙,但肯定。谢谢你的帮助,我真的知道c。An会很有帮助。同意,我很抱歉我没有时间这么做。我想这可能会解决我的问题。你能解释一下这是如何工作的,以便我以后可以自己做吗?是*r和*c指针吗对于主目录中的第[]行和第[]列?@TylerLively
row
意味着
&第[0]行
。另外
void rng(int*r,int*c){
可以写成
void rng(int r[],int c[]){
。它们具有相同的含义。
rng (int* row, int* column){

}
void rng(int *r, int *c){
    ...
    do{
        printf("\nthis is the row number\n\n");
        for ( i = 0; i < 11; i++){
            r[i] = rand()%8;
            printf("%d\n", r[i]);
        }

        printf("\nthis is the column number\n\n");
        for ( i = 0; i < 11; i++){
            c[i] = rand()%8;
            printf("%d\n", c[i]);
        }
    ...

int main (){
    int row[11];
    int column[11];
    rng(row, column);
    ...