一、指針與地址說明:
1、地址運算符&只能應用於內存中的對象,即變量與數組元素;它不能作用於表達式、常量或register類型的變量
2、一元運算符*是間接尋址或間接引用運算符,當作用於指針時,將訪問指針所指向的對象
3、指針只能志向某種特定類型的對象;一個例外是指向void類型可以存放指向任何類型的指針,但它不能間接引用其自身
二、指針與函數
c語言以傳值的方式將參數值傳遞給被調用函數,因此,被調用函數不能直接修改主調函數中的變量值
但是可以通過指針間接訪問它們指向的操作數
[html]
#include <stdio.h>
void swap(int *x ,int *y);
int main()
{
int x = 1;
int y = 2;
swap(&x,&y);
printf("x=%d y=%d\n",x,y);
}
void swap(int *x ,int *y)
{
int temp ;
temp = *x;
*x = *y;
*y = temp;
}
其輸出如下
[html]
pateo@pateo-B86N53X:~/work/study$ cc main.c -o main
pateo@pateo-B86N53X:~/work/study$ ./main
x=2 y=1
為了方便理解,我修改了下例子,學習都是在嘗試中進步的,ok?
[html]
#include <stdio.h>
void swap(int *x ,int *y);
int main()
{
int m = 1;
int n = 2;
swap(&m,&n);
printf("m=%d n=%d\n",m,n);
}
void swap(int *x ,int *y)
{
int temp ;
temp = *x;
printf("temp=%d\n",temp);
*x = *y;
*y = temp;
}
其輸出:
[html]
pateo@pateo-B86N53X:~/work/study$ cc main.c -o main
pateo@pateo-B86N53X:~/work/study$ ./main
temp=1
m=2 n=1
到這裡我已經預感到函數的指針參數和java的函數參數是有區別的,下面我把上面的代碼進行分析如下:
[html]
int *x ;
int *y;
x = &m ;
y = &n
而函數裡面的運輸替代
temp = * (&m)
*(&m) = *(&n)
*(&n) = temp
從上面應該能更好的理解