【问题标题】:How to use a pointer to edit array in the main through called function如何通过调用函数使用指针在main中编辑数组
【发布时间】:2014-10-29 22:18:43
【问题描述】:

我正在尝试使用自己编写的随机数生成器函数,但我想在 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]);
}

我希望上面的这一位将它生成的随机数保存到 row[] 并将第二位保存到 main 中的 column[]。

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

整个代码如下所示

#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);

【问题讨论】:

  • MCVE 会很有帮助。
  • 同意,很抱歉我没有时间这样做。

标签: c arrays pointers prng


【解决方案1】:

不要在 rng() 函数中本地声明 r 和 c,只需通过引用将行和列传递给 rng(row, column)。

rng (int* row, int* column){

}

【讨论】:

  • 这就是我想要做的,我的问题是如何真正做到这一点,因为每当我尝试将 row[] 传递给 rng() 时,它都会说它没有在 rng 或其他东西中定义。不过,这似乎是最好的方法。
  • 它的粗俗但可以肯定。感谢您的帮助,我真的很了解。
【解决方案2】:
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);
    ...

【讨论】:

  • 我认为这可能会解决我的问题。你能解释一下这是如何工作的,以便我以后可以自己制作吗? *r 和 *c 是指向 row[] 和 column[] 的指针吗?
  • @TylerLively row 的意思是 &amp;row[0]void rng(int *r, int *c){ 也可以写成void rng(int r[], int c[]){。它们具有相同的含义。
猜你喜欢
  • 1970-01-01
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多