前置++和後置++的區別
前置++稱爲前自加,後置的++稱爲後自加。其計算效果均爲操做數自加一。
當單獨一個語句的時候沒有區別,若是用在表達式中:
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 ; }