一群菜鸟不懂的乱说。
我把楼主的代码改了一些,如下
#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++》,并按照里面例题的风格,养成自己的习惯。
专心做抗投诉服务器的VirtVPS上线瑞士机房,看中的就是瑞士对隐私的保护,有需要欧洲抗投诉VPS的朋友不要错过了。VirtVPS这次上新的瑞士服务器采用E-2276G处理器,Windows/Linux操作系统可选。VirtVPS成立于2018年,主营荷兰、芬兰、德国、英国机房的离岸虚拟主机托管、VPS、独立服务器、游戏服务器和外汇服务器业务。VirtVPS 提供世界上最全面的安全、完全受保护和私...
Sharktech最近洛杉矶和丹佛低价配置大部分都无货了,只有荷兰机房还有少量库存,商家又提供了两款洛杉矶特价独立服务器,价格不错,CPU/内存/硬盘都是高配,1-10Gbps带宽不限流量最低129美元/月起。鲨鱼机房(Sharktech)我们也叫它SK机房,是一家成立于2003年的老牌国外主机商,提供的产品包括独立服务器租用、VPS主机等,自营机房在美国洛杉矶、丹佛、芝加哥和荷兰阿姆斯特丹等,主...
Hostkey.com成立于2007年的荷兰公司,主要运营服务器出租与托管,其次是VPS、域名、域名证书,各种软件授权等。hostkey当前运作荷兰阿姆斯特丹、俄罗斯莫斯科、美国纽约等数据中心。支持Paypal,信用卡,Webmoney,以及支付宝等付款方式。禁止VPN,代理,Tor,网络诈骗,儿童色情,Spam,网络扫描,俄罗斯色情,俄罗斯电影,俄罗斯MP3,俄罗斯Trackers,以及俄罗斯法...