c语言中的变长参数
voidvar_args_func(constchar*fmt,...){char*ap;ap=((char*)&fmt)+sizeof(fmt);/*只想问问这里为什么...
void var_args_func(const char * fmt, ... ) {
char *ap;
ap = ((char*)&fmt) + sizeof(fmt);/*只想问问这里为什么要 + sizeof(fmt) 难道这个&fmt不是4的首地址吗?*/
printf("%d\n", *(int*)ap);
ap = ap + sizeof(int);
printf("%d\n", *(int*)ap);
ap = ap + sizeof(int);
printf("%s\n", *((char**)ap));
}
int main(){
var_args_func("%d %d %s\n", 4, 5, "hello world");
}
void var_args_func(const char * fmt, ... )
函数原型里fmt就是一个指针了,所以fmt就应该是个地址了,
&fmt应该是2级地址了, sillyeeyore你为什么要说&fmt是取第一个参数的首地址呢?
你能确定你没说错吗?
我还求注释那句话的解释如果&fmt是二级指针,那么强制转化成(char *)不久指向错误的地址了?
还有即使是为什么还要加上 + sizeof(fmt) 呢?
在机器上运行sizeof(fmt)=4; 在机器上运行sizeof(fmt)=4; 展开
char *ap;
ap = ((char*)&fmt) + sizeof(fmt);/*只想问问这里为什么要 + sizeof(fmt) 难道这个&fmt不是4的首地址吗?*/
printf("%d\n", *(int*)ap);
ap = ap + sizeof(int);
printf("%d\n", *(int*)ap);
ap = ap + sizeof(int);
printf("%s\n", *((char**)ap));
}
int main(){
var_args_func("%d %d %s\n", 4, 5, "hello world");
}
void var_args_func(const char * fmt, ... )
函数原型里fmt就是一个指针了,所以fmt就应该是个地址了,
&fmt应该是2级地址了, sillyeeyore你为什么要说&fmt是取第一个参数的首地址呢?
你能确定你没说错吗?
我还求注释那句话的解释如果&fmt是二级指针,那么强制转化成(char *)不久指向错误的地址了?
还有即使是为什么还要加上 + sizeof(fmt) 呢?
在机器上运行sizeof(fmt)=4; 在机器上运行sizeof(fmt)=4; 展开
6个回答
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询