【C语言学习】国嵌21__指针基础
2019獨角獸企業重金招聘Python工程師標準>>>
一、指針基礎
變量只是一段存儲空間的別名,那么是不是必須通過這個別名才可以使用這段存儲空間?答案是否定的。我們還可以通過指針也就是地址的方式來訪問某段存儲空間。
#include?<stdio.h>int?main() {int?i?=?5;int*?p?=?&i;printf("%d,?%08X\n",?i,?p);*p?=?10;printf("%d,?%08X\n",?i,?p);return?0; }運行結果:
5, 0022FF48
10, 0022FF48
2、指針的本質
# 指針在本質上也是一個變量
# 指針需要占用一定的內存空間
# 指針用于保存內存地址的值
不同類型的指針占用內存空間的大小相同。
#include?<stdio.h>int?main() {int?i;int*?pI;char*?pC;float*?pF;pI?=?&i;*((int?*)0x22ff4c)?=?100;?printf("%0X,?%0X,?%d\n",?pI,?&i,?i);printf("%d,?%d,?%0X\n",?sizeof(int*),?sizeof(pI),?&pI);printf("%d,?%d,?%0X\n",?sizeof(char*),?sizeof(pC),?&pC);printf("%d,?%d,?%0X\n",?sizeof(float*),?sizeof(pF),?&pF);return?0; }運行結果:
22FF4C, 22FF4C, 100
4, 4, 22FF48
4, 4, 22FF44
4, 4, 22FF40
程序實現的功能:1、指針占用的內存空間2、指針的地址3、通過*號寫內存
*號的意義
# 在指針聲明時,*號表示所聲明的變量為指針
# 在指針使用時,*號表示取指針所指向的內存空間中的值。*號類似一把鑰匙,通過這把鑰匙可以打開內存,讀取內存中的值
# “*”還代表乘號
3、傳值調用與傳址調用
# 指針是變量,因此可以聲明指針參數
# 當一個函數內部需要改變實參的值,則需要使用指針參數
# 函數調用時實參值將復制到形參
# 指針適用于復雜數據類型作為參數的函數中
利用指針實現變量交換函數:
#include?<stdio.h>#define?SWAP(a,?b)?{int?t?=?a;?a?=?b;?b?=?t;}?//宏定義也可以實現變量交換void?swap(int?*a,?int?*b)?//函數定義實現變量交換 { int?t?=?*a; *a?=?*b; *b?=?t; }int?main() { int?i?=?1;? int?j?=?9;printf("%d,?%d?\n",?i,?j);swap(&i,?&j);printf("%d,?%d\n",?i,?j);return?0; }4、常量與指針
# const int *p; ? ? ? //p可變,p指向的內容不可變
# int const *p; ? ? ? //p可變,p指向的內容不可變
# int *const p; ? ??/p不可變,p指向的內容可變
# const int * const p;? //p和p指向的內容都不可變
記憶口訣:左數右指
當const出現在*號左邊時指針指向的數據為常量,當const出現在*后右邊時指針本身為常量
指針小結:
# 指針是C語言中一種特別的變量
# 指針所保存的值是內存的地址
# 可以通過指針修改內存中的任意地址內容
轉載于:https://my.oschina.net/u/141132/blog/265535
總結
以上是生活随笔為你收集整理的【C语言学习】国嵌21__指针基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PowerDesigner(16.1)使
- 下一篇: scp报错:not a regular