70,021
社区成员




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