汇编代码gcc:
创新互联主要从事做网站、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务大同,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792
第一个问题的汇编:
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++
0 0 0
12ff2c 12ff30 12ff34
func for ++n
3 2 1
12ff2c 12ff30 12ff34
func2
12ff24 12ff28 12ff2c 12ff30 12ff34
但是最后的地址也是连续的。
此类问题知道上问过多次了,可以说没有什么意义,结果与编译器实现相关,实际编程没有用处,除非写代码的人喜欢玩花俏
#include stdio.h
void fun(int * a,int k);
void main()
{
int a[10];
printf("请输入10个整数:\n");
for(int i=0;i10;i++)
{
scanf("%d",a[i]);
}
fun(a,sizeof(a)/sizeof(a[0]));
}
void fun(int a[],int k)//这就是你想要的函数
{
int g0=0,t0=0,e0=0;/*g0就是0,t0就是小于0,e0就等0*/
for(int i=0;ik;i++)
{
if(a[i]0) g0++;
if(a[i]==0) e0++;
if(a[i]0) t0++;
}
printf("大于0的个数为:%d\n",g0);
printf("小于0的个数为:%d\n",t0);
printf("等于0的个数为:%d\n",e0);
}
/*
说明就和ichenq的差不多,只是ichenq的那个有问题,比如他的if语句里多了几个";"号,导致无没通过,另外我用他的函数来测试得不到想要的结果
sizeof(a)/sizeof(a[0])就是数组a的长度*/
如果是诸如函数声明int fun(int b[]),这个是传的地址,如果fun内部有赋值操作,那么会改变数组b的元素的值
如果是执行语句fun(b[i]);那么传的就是b[i]这个值,执行完fun后,b[i]的值不会变
a是一个指向指针的指针,a里面的内容是另一个指针p的地址,那么*a就是p的地址,**a就是*p。
同理,b的内容是另一个指针q的地址,*b就是q的地址,**b就是*q
t = *a, 那么t的内容就是p的地址,
*a = *b, a里面的内容变成了q的地址,即*a是q的地址,**a就是*q
*b = t, b里面的内容变成了p的地址,即*b是p的地址,**b就是*p
这三句,将**a的值和**b的值互换了,是对指针的操作。
传值方式:向函数传递参数时,先复制一份参数,然后才将复制品传给参数。函数中所有对参数的操作,就只是在使用复制品。不会改变传递前的参数本身。
传址方式:将地址传送给函数,函数对该地址的内容操作,相当于对实参本身的操作
主函数的实参是由操作系统传递的。
c++规定的主函数标准格式(c语言未具体规定):int
main(int
argc,
char
*argv[])
其中int
argc
表示操作系统传递给程序的参数个数,char
*argv[]
存储各个参数。
例如:
若有程序如下:
int
main(int
argc,
char
*argv[])
{
int
i;
printf("您输入了
%d
个参数\n分别是:",argc);
for(i=0;i
运行-
cmd
-
输入
c:\app.exe
hello
world!
回车
执行结果将是:
您输入了
3
个参数
分别是:c:\app.exe
hello
world!
"
注意,第一个参数值将是你程序的文件名。
#include cstdlib
#include iostreamusing namespace std;
int calculate( int a, int b, int c )
{
return a*a*a+b*b*b+c*c*c;
}
int main(int argc, char *argv[])
{
int x, y, z, l;
cout " 计算等式的结果 " endl;
cout " ------------------------------------------------- " endl;
cout " 请输入x,y和z的值: ";
cin x y z;
l = calculate( x, y, z );
cout " 这3个数的立方和是 " l endl;
system("PAUSE");
return EXIT_SUCCESS;
}
做好了,请检查。。。
无参函数,是指在主调函数调用被调函数时,主调函数不向被调函数传递数据。无参函数一般用来执行特定的功能,可以有返回值,也可以没有返回值,但一般以没有返回值居多。
有参函数,是指在主调函数调用被调函数时,主调函数通过参数向被调函数传递数据。在一般情况下,有参函数在执行被调函数时会得到一个值并返回给主调函数使用。
扩展资料
1、定义有参函数的一般形式为:
函数类型 函数名(参数类型1 参数名1, 参数类型2 参数名2, …, 参数类型n 参数名n)
{
声明部分
语句部分
}
2、有参函数使用注意事项:
(1)在定义函数时,必须要指定形参的类型。实参与形参的个数必须相等,若不相等就是语法错误。此外,实参与形参的类型要相同或赋值兼容。最好是相同,这样不容易出错。如果不相同则实参按形参的类型转化,然后再送给形参。
(2)在传递数据时,实参与形参是按顺序一一对应的。