在函数中使用变长数组作为参数时
int sum(int n, int a[n]);
Run Code Online (Sandbox Code Playgroud)
很容易理解第一个参数(n)指定第二个参数(a)的长度.但遇到另一个用于VLA的原型作为参数
int sum(int n, int a[*]);
Run Code Online (Sandbox Code Playgroud)
真的很难理解为什么*用而不是在n里面[]?
我知道函数定义中的最小参数数量为零,但函数定义中的最大参数数量是多少?我只是为了知识和好奇而问这个问题,而不是我要写一个真正的功能.
是否可以创建一个PHP函数,通过引用获取所有参数的可变数量的参数?
它没有帮助我通过引用接收一个值数组的函数,也没有一个函数将其参数包含在一个对象中,因为我正在处理函数组合和参数绑定.不要考虑呼叫时间传递参考.那东西甚至不应该存在.
php parameter-passing pass-by-reference variadic-functions function-parameter
我注意到我使用的一个常见模式是为同名属性分配SomeClass.__init__()参数self.例:
class SomeClass():
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
Run Code Online (Sandbox Code Playgroud)
事实上,它必须是其他人的共同任务,以及PyDev有一个快捷方式 - 如果您将光标放在参数列表上并单击Ctrl+1您给出的选项Assign parameters to attributes将为您创建该样板代码.
是否有不同的,简短的方式来完成这项任务?
例如,考虑一下:
int sum(int a, int b)
{
return a + b;
}
Run Code Online (Sandbox Code Playgroud)
与
int sum(const int a, const int b)
{
return a + b;
}
Run Code Online (Sandbox Code Playgroud)
第二种方法通常更快吗?
C中的函数参数被复制并发送到函数,因此函数内部的更改不会影响原始值.我的理由是,在sum上面的第二个中,编译器确实知道a并且b没有在函数内部进行修改,所以它只能传递原始值而不先复制它们.这就是为什么我认为第二个sum比第一个更快.但我真的不知道.在sum上面特别简单的例子中,差异(如果有的话)应该是最小的.
编辑:这个sum例子只是为了说明我的观点.我不希望在这个特定的例子中应该有很大的差异.但我想知道在更复杂的情况下const,编译器是否可以利用函数参数中的修饰符来使函数更快.我怀疑编译器总能确定一个参数是否在一个函数内被改变(因此我的第二个问题在下面); 因此我希望当它找到一个const修饰符时,它会做出与没有const修饰符时不同的东西.
问题:一般来说,一个函数在它的参数时会const比它们不是时更快?
问题2:通常,C编译器(理论上)是否总能确定函数内是否更改了函数参数?
var a = 'why is this not undefined?';
function checkScope(a) {
var a;
console.log(a);
}
checkScope(a);
Run Code Online (Sandbox Code Playgroud)
Javascript是功能范围语言,对吗?当我在与函数参数使用相同名称的函数内部声明一个新变量时,为什么新定义的变量仍然保存与参数相同的数据?
我以为它应该是未定义的?
你能把标准的c#enum作为参数传递吗?
例如:
enum e1
{
//...
}
enum e2
{
//...
}
public void test()
{
myFunc( e1 );
myFunc( e2 );
}
public void myFunc( Enum e )
{
// Iterate through all the values in e
}
Run Code Online (Sandbox Code Playgroud)
通过这样做,我希望检索任何给定枚举中的所有名称.迭代代码会是什么样的?
任何人都可以告诉我为什么我应该在函数头中指定C数组参数的大小?例如:
void foo (int iz[6]) { iz[42] = 43; }
Run Code Online (Sandbox Code Playgroud)
附:
int is[2] = {1,2,3};
Run Code Online (Sandbox Code Playgroud)
我们得到一个有用的错误.也许它有助于评论/文档?
这样的事情(是的,这不涉及一些边缘情况 - 这不是重点):
Run Code Online (Sandbox Code Playgroud)int CountDigits(int num) { int count = 1; while (num >= 10) { count++; num /= 10; } return count; }
你对此有何看法?也就是说,使用函数参数作为局部变量.
两者都放在堆栈上,性能几乎相同,我想知道这方面的最佳实践方面.
当我为这个函数添加一个额外的冗余线路时,我觉得自己像个白痴int numCopy = num,但它确实让我感到烦恼.
你怎么看?这应该避免吗?