C語言指標與字串——第八週指標
阿新 • • 發佈:2021-11-28
取地址運算
sizeof是一個運算子,給出某個型別或變數在記憶體中所佔據的位元組數
sizeof(int)
sizeof(i)
#include <stdio.h> int main(){ int a; a=6; printf("sizeof(int)=%ld\n",sizeof(int)); printf("sizeof(a)=%ld\n",sizeof(a)); return 0; }
運算子&
作用:獲得變數的地址,它的運算元必須是變數
int i;printf("%x",&i);
地址的大小是否與int相同取決於編譯器
int i;printf("%p",&i);
相鄰地址間差距永遠是4
指標
一個指標型別的變數,就是儲存地址的變數
int i;
int* p=&i;//*,表示p是一個指標
int* p,q;
int *p,q;//p是一個指標指向int,q是一個普通變數
指標變數
變數的值是記憶體的地址
普通變數的值是實際的值
指標變數的值是具有實際值的變數的地址
作為引數的指標
void f(int* p);
在被呼叫的時候得到了某個變數的地址;
int i=0;f(&i);
在函式裡面可以通過這個指標訪問外面的這個i
訪問那個地址上的變數*
*是一個單目運算子,用來訪問指標的值所表示的地址上的變數
可以做右值也可以做左值
int k=*p;
*p=k+1;
#include <stdio.h> void f(int* p); void g(int k); int main(){ int i=6; printf("&i=%p\n",&i);//檢視i的地址 f(&i);//將i的地址交給f函式 g(i);//將i的值傳給普通函式g函式 return 0; } void f(int* p){ printf(" p=%p\n",p); printf ("*p=%d\n",*p); *p=26; }void g(int k){ printf(" k=%d\n",k); }
指標與陣列
函式引數表裡面的陣列其實就是指標
sizeof(a)== sizeof(int*)
陣列變數是特殊的指標