幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2450|回复: 7

[通用编程] 还是C的问题

[复制链接]

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
发表于 2007-4-11 16:25:22 | 显示全部楼层 |阅读模式
问题一:
main()
{
int arr_add(int *arr,int n);
static int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int *p,total;
p=a[0];
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,.....};
这样的,请问这样声明数组是静态到底有何作用呢? [s:3]
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复

使用道具 举报

18

主题

463

帖子

4万

积分

⑧专业

我就是一个茶几...

积分
48325
QQ
发表于 2007-4-11 17:55:14 | 显示全部楼层
下面的函数?
不是声明过了么- -
main函数里第4行..就是声明arr_add函数的..

静态..简单的说就是改变量只能在该函数内使用...外部使用必须通过函数调用
没有永远的朋友,也没有永远的敌人,只有永远的利益!
回复 支持 反对

使用道具 举报

18

主题

428

帖子

5260

积分

⑦老手

在美工荒中挣扎的全能

积分
5260
QQ
发表于 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;
}
回复 支持 反对

使用道具 举报

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
 楼主| 发表于 2007-4-12 16:45:15 | 显示全部楼层
main()
{
float stu_ave(float (*p)[5]);
float cour_ave(float *pt);
static float score[3][5]={{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[0]+i));
}
float stu_ave(float(*p)[5])----->那像这一题,我上面已以声明过了,为什么这里不能
{                                                 把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);
}
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复 支持 反对

使用道具 举报

1

主题

10

帖子

127

积分

③业余

积分
127
发表于 2007-4-13 04:11:21 | 显示全部楼层
楼主的代码太脏太乱!这次别人不会帮你看的。
建议看匈牙利符号表示法。
游戏业内程序提醒你:如果你还年轻,然后以后想入这行,则要趁早养成好的编程习惯。如果你已经这样用了很多年,那就随便吧。 [s:8]
回复 支持 反对

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 2007-4-13 17:00:12 | 显示全部楼层
不是所有人都喜欢匈牙利命名法的,特别是开源社区里的那些bt程序员。
え~え~お!!!
回复 支持 反对

使用道具 举报

18

主题

428

帖子

5260

积分

⑦老手

在美工荒中挣扎的全能

积分
5260
QQ
发表于 2007-4-13 23:30:38 | 显示全部楼层
= =话说我就不是很喜欢……
嘛……
我其实就不怎么喜欢用OOP,可惜的是游戏这种东西基本必须要用OOP去做抽象……
回复 支持 反对

使用道具 举报

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

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


一看就知道我是初学者了,怎么可能这样“很多年” [s:4]  [s:4]  [s:4]
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-5-4 02:31 , Processed in 0.027263 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表