本程序与【例8.9】程序比 , nzp函数的形参数组长度改为8,函数体中,for语句的循环条件也改为i8 。因此,形参数组a和实参数组b的长度不一致 。编译能够通过,但从结果看,数组a的元素a[5]、a[6]、a[7]显然是无意义的 。
③在函数形参表中 , 允许不给出形参数组的长度,或用一个变量来表示数组元素的个数 。例如,可以写为:
void nzp(int a[])
或写为
void nzp( int a[], int n )
其中形参数组a没有给出长度 , 而由n值动态地表示数组的长度 。n的值由主调函数的实参进行传送 。由此,【例8-10】又可改为【例8-11】的形式 。
【例8-11】复制纯文本新窗口
#include stdio.hvoid nzp(int a[],int n){int i;printf("\nvalues of array a are:\n");for(i=0;in;i++){if(a[i]0) a[i]=0;printf("%d ",a[i]);}}int main(void){int b[5],i;printf("\ninput 5 numbers:\n");for(i=0;i5;i++)scanf("%d",b[i]);printf("initial values of array b are:\n");for(i=0;i5;i++)printf("%d ",b[i]);nzp(b,5);printf("\nlast values of array b are:\n");for(i=0;i5;i++)printf("%d ",b[i]);return 0;}
C语言函数参数汇编代码gcc:
第一个问题的汇编:
movl $0, %ebx
incl %ebx
incl %ebx
incl %ebx
movl %ebx, 8(%esp)
movl %ebx, 4(%esp)
movl %ebx, (%esp)
call _func
汇编显示,先将n自增了3次变为3,然后调用函数,因此都是3
第二个问题的汇编:
movl $3, 16(%esp)
movl $98, 12(%esp)
movl $2, 8(%esp)
movl $97, 4(%esp)
movl $1, (%esp)
call _func2
可以看出参数对应的栈地址应该是连续的
另外,这个程序在VC6下的结果完全不一样:
func for n++
000
12ff2c12ff3012ff34
func for ++n
321
12ff2c12ff3012ff34
func2
12ff2412ff2812ff2c12ff3012ff34
但是最后的地址也是连续的 。
此类问题知道上问过多次了,可以说没有什么意义,结果与编译器实现相关 , 实际编程没有用处,除非写代码的人喜欢玩花俏
【c语言系列教程函数参数 c语言系列教程函数参数怎么写】c语言系列教程函数参数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言系列教程函数参数怎么写、c语言系列教程函数参数的信息别忘了在本站进行查找喔 。
- mongodb442安装教程 mongodb安装必须要root权限
- mongodb入门教程 mongodb第三节怎么过
- mysql使用入门教程视频 mysql操作教程
- mongodb下载安装教程 mongodb怎么下载安装
- mysqled手机版使用教程 手机上面得mysql软件
- mongodb对sql语句的支持 sqlmongodb使用教程
- mysql安装教程5.7.25 mysql全套安装
- 将数据保存到文件中c语言 将数据保存到mongodb
- java mongodb aggregate mongodb的教程java
- redis基础知识 redis入门教程大全
