首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具体的参数传递方式:按值调用、按名称调用等

具体的参数传递方式:按值调用、按名称调用等
EN

Stack Overflow用户
提问于 2010-12-08 08:03:16
回答 2查看 708关注 0票数 3

我在为期末考试做准备,偶然发现了这道考题:

考虑用类似C的表示法编写的以下程序:

代码语言:javascript
复制
int i = 1;
A[] = {4, 0, 1, 2};

void mystery05(int from, int to)
{
    int temp;
    temp = A[from];
    A[from] = A[to];
    A[to] = temp;
    i = i + 2;
    to = -1;
}

int main(void)
{
    mystery05(A[i+2], A[i]);
}

在下表中,在调用main中的mystery05之后,用适当的变量值填充这些框。每行对应于一种特定的参数传递样式(即,使用列出的样式而不是默认的C语言语义)。假设数组从0开始编制索引。

代码语言:javascript
复制
style               |___i___|__A[0]__|__A[1]__|__A[2]__|__A[3]__| 
call-by-value       |_______|________|________|________|________|
call-by-name        |_______|________|________|________|________|
call-by-reference   |_______|________|________|________|________|
call-by-value-result|_______|________|________|________|________|

我不知道该怎么做,但如果它是常规的C语义,我想答案应该是

I= 3;A= 4;A1 = 2;A2 = 1;A3 =0

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-08 11:30:23

@S.Lott :我以为‘指向字符串和数组的指针是通过引用调用的。我说错了吗?

我同意:我不想做所有的问题。如果他有考试,他应该更有头绪。不过,我想回答第一行,看看我是否理解正确。所以我可能是错的!

按值调用:除非变量是全局的,否则不更改值;否则进程如何使用i。

I数组和A数组都是全局的。

proc中发生的事情改变了这些值。

我从值1开始,所以A3和A1的值互换了。

A3现在是0,A1现在是2。A和A2保持不变。

最后,我的值更改为3

我认为考试Q错过了一个技巧,因为在proc调用之后没有询问'to‘的值。

票数 1
EN

Stack Overflow用户

发布于 2010-12-08 08:09:17

按值调用--我想--您所说的“常规C语义”是什么意思?

call-by-name是C所没有的。查一查。这不是“常规的C语义”

按引用调用假定所有参数都有"&“,参数有"*”。这不是“常规的C语义”,它是一种不同的语义,但很容易用C构建。

按值调用的结果是C语言所没有的。查一查。

每一个都是不同的。不要假设C。不要把代码当成C。你必须以不同的方式阅读代码,假设不同的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4382971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档