一 指針的引入
-
什么是指針:指針是一個變量,其值是另一個變量的內存地址
-
簡單的使用地址輸出一個變量:
-
代碼示例
#include <stdio.h> int main() {int a=10;printf("a的地址是:%p\n",&a);printf("a=%d\n",*(&a)); //*號是取值運算符return 0; }
-
成果展示:
- 報錯與總結:無
-
二 指針變量的引入
- 整型變量→存放整型數的變量
- 字符變量→存放字符型數據的變量
由此,指針變量就是存放指針的變量,存放地址的變量
指針變量的聲明:
int *ptr; //聲明一個指向int類型的變量ptr
double *dp; //聲明一個指向double類型的變量dp
需要強調的是:"*"在聲明指針變量時作用是:表示聲明指針變量;而在其它地方用于解引指針
示例:通過指針變量訪問并輸出一個變量
- 代碼示例:
#include <stdio.h>
int main()
{int a=10;int *p;p=&a;printf("a的地址是:%p\n",&a);printf("通過變量名訪問a:%d\n",a);printf("通過地址訪問a:%d\n",*(&a));printf("通過指針變量訪問a:%d\n",*p);return 0;
}
- 成果展示:
- 報錯與總結:無
三 指針變量為什么要求類型
原因:
- 內存訪問:不同類型數據占內存空間不同,指針類型決定解引用時讀取字節數,避免錯誤讀寫
- 指針運算:指針運算偏移量與指向類型相關,類型不符則無法正確計算偏移
實驗:對比正確與錯誤的指針類型的地址訪問、數據訪問、指針偏移
正確的
- 代碼示例:
#include <stdio.h>
int main()
{int a=0x1234;int *p=&a;puts("我們在這里測試指針的地址:");printf("p:%p\n",p);puts("\n我們在這里測試通過指針訪問變量:");printf("來自p的測試:%x\n",*p);puts("\n我們在這里測試指針偏移:");printf("++p:%p\n",++p);return 0;
}
- 成果展示:
- 報錯與總結:
錯誤的
- 代碼示例:
#include <stdio.h>
int main()
{int a=0x1234;int *p=&a;char *c=&a;puts("我們在這里測試指針的地址:");printf("c:%p\n",c);puts("\n我們在這里測試通過指針訪問變量:");printf("來自c的測試:%x\n",*c);puts("\n我們在這里測試指針偏移:");priintf("++c:%p\n",++c);return 0;
}
- 成果展示:我們發現,指針類型不兼容從而導致報錯
- 報錯與總結:
無