avi*_*ad1 3 c parameters pointers function
我一直在用C做一些指针测试,但我只是想知道一个函数的参数地址之间是否总是相差4个字节。
我尝试运行以下代码:
#include <stdio.h>
void func(long a, long b);
int main(void)
{
func(1, 2);
getchar();
return 0;
}
void func(long a, long b)
{
printf("%d\n", (int)&b - (int)&a);
}
Run Code Online (Sandbox Code Playgroud)
这段代码似乎总是显示4,无论func的参数是什么类型。我只是想知道它是否始终为4,因为如果这样,它将对我尝试做的事情很有用(但是如果不一定是4,我想我可以将va_list用于函数或其他东西)。因此:是否一定是4个字节?
绝对不是,在很多方面,很难一一列举。
首先,C语言根本不指定参数的内存布局。句号 未指定。因此,答案立即是“否”。
va_list之所以存在,是因为有必要浏览遍历可变参数的列表,因为除此以外没有其他指定。 va_list是故意非常有限的,所以它可以作用于平台,其堆叠的形状不匹配你的直觉。
不能总是4的其他原因:
清单一直在继续。C没有指定参数之间的相对地址。
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |