当前位置:首页 » 编程软件 » 编译原理形参

编译原理形参

发布时间: 2022-09-06 19:25:06

‘壹’ c函数形参如果没有名字,只有类型,在下面使用的时候,怎么使用

定义的时候确实可以不写形参名字。
你如果学了编译原理的话可以知道函数间是如何传参的(大多语言是通过栈),
c语言是第n个参数先压栈,再压第n-1个,。。。再压第一个。最后修改栈顶指针add esp,8。
当进入函数时都是
push ebp
mov ebp,esp
所以可以这么实现
//VS2010环境
void f(int,int)
{
int a,b;
__asm //这是嵌入汇编关键字,在VC6.0嵌入汇编好像是asm
{
mov eax,[ebp+8]
mov a,eax ;第一个参数
mov eax,[ebp+12]
mov b,eax ;第二个参数
}
printf("%d\t%d\n",a,b);
}
void main()
{
f(7,3);
}

‘贰’ 静态存储分配和动态存储分配之间有什么不同 编译原理

myisam_recover=64K#允许的GROUP_CONCAT()函数结果的最大长度transaction_isolation=REPEATABLE-READinnodb_file_per_table

‘叁’ 编译原理题目。。给100分

是VB啊 我好久没弄了,先学习下

‘肆’ 一些关于编译原理的题目(选择,判断)

2年前还会做,现在都忘了

‘伍’ 第32题 为啥D是对的 不是说形参数组除一维长度以外 其他维度长度需要相等吗

可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,如:

void Func(int array[3][10]);

void Func(int array[][10]);

二者都是合法而且等价,但是不能把第二维或者更高维的大小省略,如下面的定义是不合法的:

void Func(int array[][]);

因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行多 少列,不能只指定一维而不指定第二维,下面写法是错误的:

void Func(int array[3][]);实参数组维数可以大于形参数组,例如实参数组定义为:

void Func(int array[3][10]);

而形参数组定义为:

int array[5][10];

这时形参数组只取实参数组的一部分,其余部分不起作用。

[原文结束]

大家可以看到,将二维数组当作参数的时候,必须指明所有维数大小或者省略第一维的,但是不能省略第二维或者更高维的大小,这是由编译器原理限制的。大家在学编译原理这么课程的时候知道编译器是这样处理数组的:

‘陆’ C语言串赋值操作,形参有些不懂,int strassign(Str &str,char *ch)目的是将常量字符串赋给str

在int strassign(Str &str,char *ch)中,str是引用传递,ch是以'\0'结束的字符串,无论ch是字符数组,还是字面常量,都会将形参的首地址作为指针传递给被调函数,在所给实例中,形参是字面常量,编译器会在“栈”中分配空间用以存放字面常量,这与在主调函数中用字符数组或指针调用完全一样。

‘柒’ 有关c程序 的问题。函数作为形参的问题

#include <stdio.h>

int main()
{
int fac(int n);
int sum(int m,int n);
int n,a;
scanf("%d",&n);
printf("%d!=%d\n",n,fac(n));
a=fac(n);
printf("%d\n",sum(a,n));
return 0;
}

int fac(int n)
{
int f;
if (n==0||n==1)
f=1;
else if (n<0)
printf("data error");
else
f=n*fac(n-1);
return(f);

}

int sum(int m,int n)
{
int i,f=0;
for(i=1;i<=n;i++)
f=f+fac(i);
return(f);
}
我帮你改了下,能用了.
int sum(int fac(int n),int n)
这里定义形参时出错了。形参是一个变量,代表着被调用时分配的内存单元的名字,不能用 fac(int n)。
函数被调用时,是实参传递给形参值,即就是把实参代表的内存单元的值赋值给了形参,在函数调用完时,再返还一个函数的值,这个值可以再赋值给被的变量或着直接用printf()函数输出这个值。
楼上的网址我也看了,不过还没学过那个用法。~-~
一会去试试。~-~

‘捌’ C#的可选参数,为什么一定要放在参数列表的最后

这涉及到编译原理了,一般地,函数的形参(如果有的话),函数的形参入栈是由左至右入栈,排第一的形参被第一个压入栈里,成为栈底元素,关键点就这里,因为形参的第一个参数必须是确定的,由此,编译器系统才可以对函数开辟一个保存形参的栈区,然后第一个之后的元素陆续入栈。如果是把可选的参数排在前面,由于它是不确定的,编译系统无法预知何时才会需要对函数开辟一个保存形参的栈区。所以,.NET的编译器规定必须把可选的形参统统放在最后。

热点内容
安卓版优酷为什么没有极清4k 发布:2025-03-20 12:58:10 浏览:460
服务器硬盘怎么装 发布:2025-03-20 12:57:13 浏览:630
fsb文件解压 发布:2025-03-20 12:31:34 浏览:136
3d源码棋牌 发布:2025-03-20 12:30:31 浏览:238
什么叫服务器访问限制 发布:2025-03-20 12:23:53 浏览:945
机架式服务器如何拆装 发布:2025-03-20 12:23:53 浏览:23
交叉编译器缺少库 发布:2025-03-20 12:20:12 浏览:716
tt语音新人签到领皮肤脚本 发布:2025-03-20 12:20:05 浏览:693
编程招标网 发布:2025-03-20 12:19:28 浏览:1001
风险防控平台服务器地址是什么 发布:2025-03-20 11:59:04 浏览:232