9.1指針
9.1-1取地址運算:&運算符取得變量的地址
運算符&
- scanf(“%d”,&i);里的&
- 獲取變量的地址,它們操作數必須是變量
- int i;printf(“%x”,&i);
- 地址的大小是否與int相同取決于編譯器
- int i;printf(“%p”,&i);
&不能取的地址 - 不能對沒有地址的東西取地址
- &(a+b) &(a++) &(++a)這些都不能取地址
試試這些& - 變量的地址
#include <stdio.h>int main()
{int a=1;printf("0x%p",&a);return 0;
}
- 相鄰變量的地址
#include <stdio.h>int main()
{int a=1;int b=2;printf("0x%p\n",&a);printf("0x%p\n",&b);return 0;
}
- &的結果的sizeof
#include <stdio.h>int main()
{int a=1;int b=2;printf("0x%p\n",&a);printf("0x%p\n",&b);printf("%lu\n",sizeof((&a)));return 0;
}
- 數組的地址
- 數組單元的地址
- 相鄰的數組單元的地址
#include <stdio.h>int main()
{int a[10];printf("%p\n",a);printf("%p\n",&a);printf("%p\n",&a[0]);printf("%p\n",&a[1]);
}
&數組名,數組名,數組名[0],都表示數組的首地址。
9.1.2指針:指針變量就是記錄地址的變量
scanf
- 如果能夠將取得的變量的地址傳遞給一個函數,能否通過這個地址在那個函數內訪問這個變量
- scanf(“%d”,&i);
- scanf()的原型應該是怎樣的?我們需要一個參數能保存別的變量的地址,如何表達能夠保存地址的變量?
指針
就是保存地址的變量
int i;
int* p = &i;
int* p,q;
int p,q;
這里邊的 號只是表示p是存儲地址的變量,不是代表int這種類型,也沒有int這種類型。
int *p=&a,應為int *p中p是要儲存一個地址,所以給int *p賦值時必須是一個變量的地址
int *p,q這里邊只有p是存儲地址的變量,而q還是一個int型的變量。
指針變量 - 變量的值是內存的地址
- 普通變量的值是實際的值
- 指針變量的值是具有實際意義的變量的地址
作為參數的變量 - void f(int *p);
- 在被調用的時候得到了某個變量的地址;
- int i = 0;f(&i);
- 在函數里面可以通過這個指針訪問外面的這個i