请教c函数参数入栈的问题

hzy694358 hzy694358 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
直接上代码

char * add_normal(int num, ...) {
int *p;
char * ret;
p = &num + 1; //p指向参数列表下一个位置
ret = *(char **)p;

return ret;
}

char * add_normal2(short num, ...) {
short *p;
char * ret;

p = &num + 8; //p指向参数列表下一个位置 为什么要+8才能定位要下一个地址呢 ?
ret = *(char **)p;

// ret = ret + strlen(ret) + 1;
return ret;
}

char * add_normal3(short num, ...) {
char * ret;
int *p;
p = (int *)&num+4;
ret = *(char **)p;

// ret = ret + strlen(ret) + 1;
return ret;
}

void show_test1(int num1, int num2)
{
printf("num1=%d in address [%p]\n",num1, &num1);
printf("num2=%d in address [%p]\n",num2, &num2);
printf("address2-address1=%d\n",(int)&num2-(int)&num1);
}

void show_test2(short num1, int num2)
{
printf("num1=%d in address [%p]\n",num1, &num1);
printf("num2=%d in address [%p]\n",num2, &num2);
printf("address2-address1=%d\n",(int)&num2-(int)&num1);
}

int main(int argc, char **argv) {
printf("%s\n", add_normal(5,"13dsfsdaf",2,3,4,5));
printf("%s\n", add_normal2(5,"13dsfsdaf","2fsdfs",3,4,5));
printf("%s\n", add_normal3(5,"13dsfsdaf","2fsdfs",3,4,5));
printf("%d\n", add_normal4(5,1,2,3,4,5));
show_test1(1,2);
show_test2(1,2);
return 0;
}

liunux 下

输出是
13dsfsdaf
13dsfsdaf
13dsfsdaf
num1=1 in address [0xbffe0fc0]
num2=2 in address [0xbffe0fc4]
address2-address1=4
num1=1 in address [0xbffe0fac]
num2=2 in address [0xbffe0fc4]
address2-address1=24



疑问:add_normal2 中 就算short被提升为int入栈 为什么要+8才能定位要下一个地址呢?
show_test2函数 相差的怎么是24?
...全文
评论 6
收藏 已收藏
分享
返回顶部
hzy694358
C语言 70,039 成员 243,237 内容