一群菜鸟不懂的乱说。
我把楼主的代码改了一些,如下
#include<stdio.h>
int input(int data[], int argc, int *n) { int i; printf("请输入要输入数的个数"); scanf("%d", n); if(*n > argc) { printf("segment fault!"); return -1; } for(i = 0; i < *n; i++) { printf("输入的第%d个数.", i+1); scanf("%d", data+i); //canf("%d", &data[i]); } printf("输入的数是: "); for(i = 0; i < *n; i++) { printf("%5d ", data[i]); } return 0; }
void sort(int n, int data[]) { int i, j, temp; for(i = 0; i < n-1; i++) { for(j = i+1; j < n; j++) if(data[i] < data[j]) { temp = data[i]; data[i] = data[j]; data[j] = temp; } } printf("排序后的结果如下: "); for(i = 0; i < n; i++) printf("%5d ", data[i]); }
int main() { int data[100]; int n; if(input(data, 100, &n) == -1) return -1; sort(n, data); return 0; }
对于以上代码,做出如下解释:
(1)C语言的参数有形参和实参的说法,形参在传递到函数内的时候,复制一个副本给函数,在函数内部和外部是两个完全不同的变量,函数结束,空间也被释放,所以不能在函数内部来改变外部的值。
所以要像楼主这样用一个函数给一个变量赋值,要用实参int input(int data[], int argc, int *n)中的int *n就是实现形式,这种办法把n的地址传递给函数。
当然,在调用函数的时候也同样要传递地址指针类型(&n)。
(2)
if(*n > argc) { printf("segment fault!"); return -1; }
这一段是我加进去的,因为按照楼主的意思,data数组的长度也要传递进去,但是意思何在?所以只好加了这一段,并把函数改为有类型的,以检验是否有数据溢出。
(3)scanf("%d", data+i); //scanf("%d", &data[i]);
这里我改动的主要原因是为了提升程序速度,scanf("%d", &data[i]);同样可以运行,但是寻址一次,又回头要地址,这样绕了一圈,没有必要。
对于楼主提几点建议:
(1)C语言的精髓在于指针,刚才说到的实参,就是用指针的概念实现的。
scanf("%d", data+i); 一行,同样也是把数组头指针加上偏移地址,得到所要的地址。
(2)C语言编程的时候特别要注意数据的溢出,这是所有初学者头疼的问题之一。
建议在一开始就养成习惯,经常检验数组的边界。
(3)void main一看就知道是看潭浩强的书长大的程序员。
建议我们都用int main(){ return 0; }的形式,可以看看C语言之父K&R的书。
主函数的返回值是告诉操作系统,这个函数是正常退出(返回0),还是异常退出(非0,经常是-1)。
(4)在做实际项目的时候,程序经常是要回头看的,也经常是要给别人看以达到维护的目的的。
除了要养成良好的文档书写习惯以外(学习软件工程以后你就会掌握),还要养成良好的编程风格,这里我建议看《thinking in C++》,并按照里面例题的风格,养成自己的习惯。
gcorelabs怎么样?gcorelabs是创建于2011年的俄罗斯一家IDC服务商,Gcorelabs提供优质的托管服务和VPS主机服务,Gcorelabs有一支强大的技术队伍,对主机的性能和稳定性要求非常高。Gcorelabs在 2017年收购了SkyparkCDN并提供全球CDN服务,目标是进入全球前五的网络服务商。G-Core Labs总部位于卢森堡,在莫斯科,明斯克和彼尔姆设有办事处。...
CloudServer是一家新的VPS主机商,成立了差不多9个月吧,提供基于KVM架构的VPS主机,支持Linux或者Windows操作系统,数据中心在美国纽约、洛杉矶和芝加哥机房,都是ColoCrossing的机器。目前商家在LEB提供了几款特价套餐,最低月付4美元(或者$23.88/年),购买更高级别套餐还能三个月费用使用6个月,等于前半年五折了。下面列出几款特别套餐配置信息。CPU:1cor...
蓝速数据金秋上云季2G58/年怎么样?蓝速数据物理机拼团0元购劲爆?蓝速数据服务器秒杀爆产品好不好?蓝速数据是广州五联科技信息有限公司旗下品牌云计算平台、采用国内首选Zkeys公有云建设多种开通方式、具有IDC、ISP从业资格证IDC运营商新老用户值得信赖的商家。我司主要从事内地的枣庄、宿迁、深圳、绍兴、成都(市、县)。待开放地区:北京、广州、十堰、西安、镇江(市、县)。等地区数据中心业务,均KV...