1.7 C之 指針與函數傳參(挺騷)

前置++和後置++的區別
前置++稱爲前自加,後置的++稱爲後自加。其計算效果均爲操做數自加一。
當單獨一個語句的時候沒有區別,若是用在表達式中:
i++是先自加,而後在取i的值作計算。
int i =2, j;
若是
j = i++;
那麼先取i的賦值給j,因而j值爲2,i值再自加,i=3。
若是
j =++i;
那麼i先自加,獲得i = 2,而後再取i計算,j值爲3。
函數傳參中使用的指針
int add(int a,int b)函數傳參使用了int型數,自己是數值類型。實際調用該函數時,實參將本身拷貝一份,並將拷貝傳遞給形參進行運算。實參本身實際是不參與的。因此,在函數中,是沒發改變實參自己的。
#include<stdio.h>
int main(void)
{
int x,y;
x = 5;
y = 3;
printf("before swap: x = %d,y = %d.\n",x,y);
swap(x,y);
printf("after swap: x = %d,y = %d.\n",x,y);ide

}
        //在函數內部,交換a和b的值
        //實際測試結果失敗,並無交換。
        //緣由:C語言中,函數調用時,實參傳遞給形參實際是傳值調用。也就是說,實參x和y將本身的值拷貝一份傳給形參a和b,在子函數swap中實際交換的是a和b,而不是實參x和y,由於函數執行完後,x和y的值依然,並無被交換。
        int  swap(int  a,int  b)
        {
              int swap;
                    temp = a ;
                    a = b;
                    b = temp;

                    return  0;
        }

        ______________________________________________
        //在函數內部,交換a和b的值。
        //測試結果:交換成功。
        //緣由:c語言函數調用時,一直都是函數調用。也就是實際傳遞的一直都是實參的拷貝。可是本函數中形參和實參都並非x和y,而是x和y的地址值。這樣讓咱們在函數中經過間接訪問*p的方式,在函數內訪問到了函數外面調用時的實參。
        #include<stdio.h>
        int main(void)
        {
                int x,y;
                x = 5;
                y = 3;
                printf("before swap: x = %d,y = %d.\n",x,y);
                swap_pointer(&x,&y);
                printf("after swap: x = %d,y = %d.\n",x,y);

        }

        int  swap_pointer(int *p1,int *p2)
        {
                int temp;
                temp= *p1;    //實際調用時,p1獲得的實參是x的地址&x, *p1表明的就是x
                *p2 = *p2;
                *p2 = temp;

                return  0 ;
        }
相關文章
相關標籤/搜索