august 发表于 2007-4-11 16:25:22

还是C的问题

问题一:
main()
{
int arr_add(int *arr,int n);
static int a={1,3,5,7,9,11,13,15,17,19,21,23};
int *p,total;
p=a;
total=arr_add(p,12);
printf("total=%d\n",total);
}
arr_add(int *arr,int n)
{
int i,sum=0;
for(i=0;i<n;i++,arr++)
sum+=*arr;
return(sum);
}

我想问的是下面的函数为什么不用 INT来声明呢?

问题二:
在一些关于数组的程序中常看到形似这样的,
static int a[]={1,2,3,4,.....};
这样的,请问这样声明数组是静态到底有何作用呢?

霸全勋章 发表于 2007-4-11 17:55:14

下面的函数?
不是声明过了么- -
main函数里第4行..就是声明arr_add函数的..

静态..简单的说就是改变量只能在该函数内使用...外部使用必须通过函数调用

Miliardo 发表于 2007-4-12 13:16:58

汗楼上的……

静态的意思应该是把变量放在全局上下文中……第二次进入同一个函数(还是说同样拥有这个静态变量定义的上下文?)的时候这个变量还是保持上次的值……(当然如果你写了赋值就没什么用了)这个意思。

下面引文:

  static 声明的变量在C语言中有两方面的特征:

  1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。

  2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。

  若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;

  若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;

  设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;


没有带变量类型声明的应该是默认当作void类型吧……这个好像是K&R C的非标准化语法,现在应该不提倡使用了。

= =诡异的K&R语法似乎还允许这样写:

func1 (rp1,rp2)
int rp1,
int rp2
{
return;
}

august 发表于 2007-4-12 16:45:15

main()
{
float stu_ave(float (*p));
float cour_ave(float *pt);
static float score={{100,60,70,81,52},{62,71,83,92,98},{90,70,50,60,40}};
int i;
for(i=0;i<3;i++)
printf("Teh average score of student %d:%6.2f\\n",i,stu_ave(score+i));
printf("\\n");
for(i=0;i<5;i++)
printf("The average score of course %d:%6.2f\\n",i,cour_ave(score+i));
}
float stu_ave(float(*p))----->那像这一题,我上面已以声明过了,为什么这里不能
{                                                 把float去掉呢??而我上面那题又可以去掉呢?
int i;
float sum=0,ave;
for(i=0;i<5;i++)
sum=sum+*(*p+i);
ave=sum/5;
return(ave);
}
float cour_ave(float *pt)
{
int i;
float sum=0,ave;
for(i=0;i<3;i++,pt=pt+5)
sum+=*pt;
ave=sum/3;
return(ave);
}

vickylh 发表于 2007-4-13 04:11:21

楼主的代码太脏太乱!这次别人不会帮你看的。
建议看匈牙利符号表示法。
游戏业内程序提醒你:如果你还年轻,然后以后想入这行,则要趁早养成好的编程习惯。如果你已经这样用了很多年,那就随便吧。

shawind 发表于 2007-4-13 17:00:12

不是所有人都喜欢匈牙利命名法的,特别是开源社区里的那些bt程序员。

Miliardo 发表于 2007-4-13 23:30:38

= =话说我就不是很喜欢……
嘛……
我其实就不怎么喜欢用OOP,可惜的是游戏这种东西基本必须要用OOP去做抽象……

august 发表于 2007-4-14 15:49:36

引用第4楼vickylh于2007-04-13 04:11发表的:
楼主的代码太脏太乱!这次别人不会帮你看的。
建议看匈牙利符号表示法。
游戏业内程序提醒你:如果你还年轻,然后以后想入这行,则要趁早养成好的编程习惯。如果你已经这样用了很多年,那就随便吧。


一看就知道我是初学者了,怎么可能这样“很多年”
页: [1]
查看完整版本: 还是C的问题