指针基本概念分析
文章目錄
- 1 指針
- 1.1 *號的意義
- 1.2 傳值調用與傳址調用
- 2 指針的運算與比較
- 2.1 指針與整數的運算
- 2.2 指針之間的運算
- 2.3 指針的比較
- 3 二級指針
- 3.1 指向指針的指針
1 指針
1.1 *號的意義
*號:
- 在指針聲明時,*號表示所聲明的變量為指針。
- 在指針使用時,*號表示取指針所指向的內存空間中的值。
小貼士:
對于指針我們需要知道: - 指針是C語言中一種特別的變量。
- 指針所保存的值是內存的地址。
- 可以通過修改指針修改內存中的任意地址內容。
1.2 傳值調用與傳址調用
傳值調用與傳址調用:
- 指針是變量,因此可以聲明指針參數。
- 當一個函數體內部需要改變實參的值,則需要使用指針參數。
- 函數調用時實參值將復制到形參。
- 指針適用于復雜數據類型作為參數的函數中。
2 指針的運算與比較
2.1 指針與整數的運算
指針是一種特殊的變量,與整數的運算規則如下:
結論: 當指針p指向一個同類型的數組的元素時,p+1將指向當前元素的下一個元素;p-1將指向當前元素的上一個元素。
2.2 指針之間的運算
指針之間只支持減法運算,參與減法運算的指針類型必須相同。
注意:
2.3 指針的比較
指針的比較:
- 指針可以進行關系運算(<,<=,>,>=)。
- 指針關系運算的前提是同時指向同一個數組中的元素。
- 任意兩個指針之間的比較運算(==、!=)無限制。
- 參與比較運算的指針類型必須相同。
指針運算示例:
#include <stdio.h>int main() {char s1[] = {'H', 'e', 'l', 'l', 'o'};int i = 0;char s2[] = {'W', 'o', 'r', 'l', 'd'};char* p0 = s1;char* p1 = &s1[3];char* p2 = s2;int* p = &i;printf("%d\n", p0 - p1);printf("%d\n", p0 + p2); // errorprintf("%d\n", p0 - p2); // 結果未定義printf("%d\n", p0 - p); // errorprintf("%d\n", p0 * p2); // errorprintf("%d\n", p0 / p2); // errorreturn 0; }指針運算的應用:
#include <stdio.h>#define DIM(a) (sizeof(a) / sizeof(*a))int main() {char s[] = {'H', 'e', 'l', 'l', 'o'};char* pBegin = s;char* pEnd = s + DIM(s); // Key pointchar* p = NULL;printf("pBegin = %p\n", pBegin);printf("pEnd = %p\n", pEnd);printf("Size: %d\n", pEnd - pBegin);for(p=pBegin; p<pEnd; p++){printf("%c", *p);}printf("\n");return 0; }3 二級指針
3.1 指向指針的指針
基本概念:
- 指針的本質是變量。
- 指針會占用一定的內存空間。
- 可以定義指針的指針來保存指針變量的地址值。
為什么需要指向指針的指針?
- 指針在本質上也是變量。
- 對于指針也同樣存在傳值調用與傳址調用。
二級指針的應用:重置動態空間大小
#include <stdio.h> #include <malloc.h>int reset(char**p, int size, int new_size) {int ret = 1;int i = 0;int len = 0;char* pt = NULL;char* tmp = NULL;char* pp = *p;if( (p != NULL) && (new_size > 0) ){pt = (char*)malloc(new_size);tmp = pt;len = (size < new_size) ? size : new_size;for(i=0; i<len; i++){*tmp++ = *pp++; }free(*p);*p = pt;}else{ret = 0;}return ret; }int main() {char* p = (char*)malloc(5);printf("%p\n", p);if( reset(&p, 5, 3) ){printf("%p\n", p);}free(p);return 0; }參考資料:
總結
- 上一篇: 双色球随机选号器界面设计及功能实现
- 下一篇: 东风菱智m3的空调压缩机在哪个位置?