user-0 提问: 我想知道哪里出错了——关于以数组为参数的函数

回复:
user: user-1
content: 引用 楼主 u014026652 的回复:#include<graphics.h> #include<stdio.h> #include<math.h> #include<stdlib.h> #include<string.h>   #include <conio.h>  int a[100],b[100],c[100]; void putstar() {   int i,dotx,doty,w,h,t;   w=getmaxx();   h=350;   for(i=0;i<100;i++)   {     dotx=rand()%(w-1);     a[i]=dotx;     doty=rand()%(h-1);     b[i]=doty;     t=rand()%(3);     c[i]=t;     setfillcolor(WHITE);     fillcircle(dotx,doty,t);   } } void revertstar(int a[],int b[],int c[]) {   int i;   for(i=0;i<100;i++)   {     setfillcolor(WHITE);     fillcircle(a[i],b[i],c[i]);   } }  void main() { 	initgraph(640, 480); 	 	int x = 320,y=240; setfillcolor(LIGHTBLUE); bar(0, 0,640,480); setfillcolor(GREEN); bar(0, 350,640,480);  putstar(); 	 	// 画初始图形 	setlinecolor(YELLOW); 	setfillcolor(YELLOW); 	fillcircle(x, y, 30);  	 	char c; 	while(c != 27) 	{ 		// 获取按键 		c = getch(); 		 		// 先擦掉上次显示的旧图形 		setlinecolor(BLACK); 		setfillcolor(BLACK); 		fillcircle(x, y, 50); 		 		// 根据输入，计算新的坐标 		switch(c) 		{ 			case 75: x-=2; break; 			case 77: x+=2; break;             case 72: y-=2; break;             case 80: y+=2; break; 			case 27: break; 		} 		 		// 绘制新的图形 		setlinecolor(YELLOW); 		setfillcolor(YELLOW); 		fillcircle(x, y, 50);         revertstar(a,b,c); 		 		// 延时 		Sleep(10); 	} 	 	closegraph(); }  参数传递入栈的时候，是需要cpu的寄存器来存储这些值的，你的cpu能给你当做数据存储的非特殊寄存器就算是CISC也就32个上下，通常比这个值少，难道你数组有1000个元素也挨个让传进去？怎么放的下！  这个问题之后你再想想，数组的特性，告诉数组里面某个元素的地址，再告诉你这个元素是第几个，再知道类型，让你输出数组所有元素，你会办不到么？

user: user-2
content: main中，char c;的定义c传给revertstar(a,b,c);的C了，能不错吗

user: user-3
content: 为什么楼主不将整个互联网内容作为函数参数传递呢？！

user: user-4
content: #include<graphics.h> #include<stdio.h> #include<math.h> #include<stdlib.h> #include<string.h> #include<conio.h>  int a[100],b[100],c[100];  void fillcircle(int x, int y, int radius) {     /* add your code here... */ }  void setfillcolor(int color) {     /* add your code here... */ }  void setlinecolor(int color) {     /* add your code here... */ }  void putstar() {     int i,dotx,doty,w,h,t;     w=getmaxx();     h=350;     for(i=0;i<100;i++)     {         dotx=rand()%(w-1);         a[i]=dotx;         doty=rand()%(h-1);         b[i]=doty;         t=rand()%(3);         c[i]=t;         setfillcolor(WHITE);         fillcircle(dotx,doty,t);     } }  void revertstar(int a[],int b[],int c[]) {     int i;     for(i=0;i<100;i++)     {         setfillcolor(WHITE);         fillcircle(a[i],b[i],c[i]);     } }  void main() {     int gdriver = DETECT, gmode;     int x = 320,y=240;     char c;      initgraph(&gdriver, &gmode, "");     /*initgraph(640, 480);*/       setfillcolor(LIGHTBLUE);     bar(0, 0,640,480);     setfillcolor(GREEN);     bar(0, 350,640,480);      putstar();      /* 画初始图形 */     setlinecolor(YELLOW);     setfillcolor(YELLOW);     fillcircle(x, y, 30);      while(c != 27)     {         /* 获取按键 */         c = getch();          /* 先擦掉上次显示的旧图形 */         setlinecolor(BLACK);         setfillcolor(BLACK);         fillcircle(x, y, 50);          /* 根据输入，计算新的坐标 */         switch(c)         {         case 75: x-=2; break;         case 77: x+=2; break;         case 72: y-=2; break;         case 80: y+=2; break;         case 27: break;         }          /* 绘制新的图形 */         setlinecolor(YELLOW);         setfillcolor(YELLOW);         fillcircle(x, y, 50);         revertstar(a,b,c);          /* 延时 */         sleep(10);         /*Sleep(10);*/     }      closegraph(); }   已经在Win-TC下通过编译。有3个函数有待LZ实现：fillcircle,setfillcolor,setlinecolor，逻辑错误有待LZ自己查找。

user: user-5
content: 不要把什么都定义成a,b,c, 到时候你自己的区分不了.  比如全局数组的a,b,c. 你可以加一个g_ 作为前缀.  如: g_a[100]. 函数参数的名字也要改变下.