1、指針基礎函數
變量只是一段存儲空間的別名,那麼是否是必須經過這個別名纔可使用這段存儲空間?答案是否認的。咱們還能夠經過指針也就是地址的方式來訪問某段存儲空間。spa
#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, 0022FF48code
二、指針的本質orm
# 指針在本質上也是一個變量內存
# 指針須要佔用必定的內存空間it
# 指針用於保存內存地址的值io
不一樣類型的指針佔用內存空間的大小相同。class
#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
程序實現的功能:一、指針佔用的內存空間二、指針的地址三、經過*號寫內存
*號的意義
# 在指針聲明時,*號表示所聲明的變量爲指針
# 在指針使用時,*號表示取指針所指向的內存空間中的值。*號相似一把鑰匙,經過這把鑰匙能夠打開內存,讀取內存中的值
# 「*」還表明乘號
三、傳值調用與傳址調用
# 指針是變量,所以能夠聲明指針參數
# 當一個函數內部須要改變實參的值,則須要使用指針參數
# 函數調用時實參值將複製到形參
# 指針適用於複雜數據類型做爲參數的函數中
利用指針實現變量交換函數:
#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; }
四、常量與指針
# const int *p; //p可變,p指向的內容不可變
# int const *p; //p可變,p指向的內容不可變
# int *const p; /p不可變,p指向的內容可變
# const int * const p; //p和p指向的內容都不可變
記憶口訣:左數右指
當const出如今*號左邊時指針指向的數據爲常量,當const出如今*後右邊時指針自己爲常量
指針小結:
# 指針是C語言中一種特別的變量
# 指針所保存的值是內存的地址
# 能夠經過指針修改內存中的任意地址內容