码迷,mamicode.com
首页 > 其他好文 > 详细

函数传参

时间:2014-09-18 12:56:53      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   ar   for   div   sp   log   

1  函数传参的顺序:

#include <stdio.h> 
//进栈栈地址是递减的。先进栈的在高地址,后进栈的在低地址。

//函数传参:参数从最右边先进栈,先进后出。
 

 

#include <stdio.h> 
void fun(int a, ...) 
{ 
    int i;
    int *temp = &a;
    temp++;
    for (i = 0; i < a; ++i) 
    { 
        printf("%d\n" , *temp);
        temp++; 
    } 
}
void funstr(int a, ...) 
{ 
    int i;
    int *temp = &a;
    temp++;
    for (i = 0; i < a; ++i) 
    { 
        printf("%s" ,  (char*)(*temp));
        temp++; 
    } 
    printf("\n");
}
int main() 
{ 
    int a = 12; 
    int b = 22; 
    int c = 32; 
    int d = 42; 
    fun(4, a, b, c, d); 


    char *as = "I ";
    char *bs = "am " ;
    char *cs = "fire!" ;
    funstr(3 , as ,bs,cs);
    return 0; 
} 
/*
gcc for.c ;./a.out 
12
22
32
42
I am fire!
*/

 2 拷贝传递

typedef struct {
    char a;
    char b ;
}ST;
int fun2(ST st){
    printf("in fun2 : 0x%x\n",&(st.a));    
    printf("in fun2 : 0x%x\n",&(st.b));
}
int main()
{
    ST st ;
    printf("0x%x\n",&(st.a));    
    printf("0x%x\n",&(st.b));
    fun2( st);
}

/*

0xbfc2841e
0xbfc2841f
in fun2 : 0xbfc28400   //st内容不变(公知),地址改变。占据堆栈中sizeof(ST)的内存。
in fun2 : 0xbfc28401

*/

 

函数传参

标签:style   blog   color   io   ar   for   div   sp   log   

原文地址:http://www.cnblogs.com/mylinux/p/3978855.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!