前言:本篇文章將繼續(xù)講解有關指針的剩余基礎知識。
學無止境,一起加油叭?。?/p>
目錄
一.指針運算
1.指針 +- 整數
?2.指針的關系運算
?3.指針 - 指針
二.指針與數組
三.二級指針
四.指針數組
總結
一.指針運算
指針運算包括以下三種:
- 指針 +- 整數
- 指針 - 指針
- 指針的關系運算
1.指針 +- 整數
我們嘗試用指針來打印一個數組的內容:
#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int* p = arr;//數組名是數組首元素的地址
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d ", *(p + i));
}
return 0;
}
我們在指針(上)中已經了解到,指針+-整數能夠實現指針的跳動。
那么我們便能夠根據這個辦法來實現打印數組:
p指向的是數組的首元素地址,那么p + i就等于是指針跳到了數組下標為 i 的元素的地址。
當然要實現這一點就必須要求數組和指針變量是相同的數據類型。
?2.指針的關系運算
指針與指針之間也是可以比較大小的,比較的是指針所指向的地址的大小。
#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int* p1 = &arr[4];
int* p2 = &arr[5];
if (*p1 > *p2)
{
printf("hehe");
}
else
{
printf("haha");
}
return 0;
}
例如我們來比較一下p1和p2的大小,結果如下:
?3.指針 - 指針
指針-指針的實現必須滿足兩個條件:
- 兩個指針指向同一塊區(qū)域(一個數組等)
- 兩個指針的類型相同
#include<stdio.h>
int main()
{
int arr[10] = { 0 };
int* p1 = &arr[9];
int* p2 = &arr[0];
printf("%d", p1 - p2);
return 0;
}
來看上邊的代碼,會得到什么結果呢???
結果是9,有的小伙伴可能會猜是36,以為會是兩個指針之間的字節(jié)個數。
而實際上是兩個指針之間的元素個數。
二.指針與數組
如上代碼,之所以能把數組和指針聯系在一起,是因為數組名可以表示數組首元素的地址。
但是數組名也有不同的用法:
- 1.sizeof(數組名):數組名單獨放在sizeof內部,數組名則代表整個數組,計算的是數組的大小,單位是字節(jié)。
- &數組名:數組名代表整個數組,取出的是數組的地址,數組的地址和數組首元素的地址值是一樣的,但是類型和意義是不一樣的。
?三.二級指針
?? ?int a = 5;
?? ?int* p = &a;//p是指針變量,一級指針變量
?? ?int** pp = &p;//pp是指針變量,二級指針變量
這樣也很像套娃對不對,所謂二級指針,也就是存放一級指針變量地址的指針。當然也可以有三級、四級、五級等等等等,但是一般都不會用到,包括二級指針也是不常用的。
那么二級指針如果想要找到a的地址,就要解引用兩次,第一次是找到*p的地址,第二次才能找到a的地址,所以要用** pp。
四.指針數組
聽到這個名字可能很多小伙伴會產生疑惑,這個到底是指針還是數組呢???
答案是數組。
我們聽說過整型數組,浮點型數組,字符數組,它們分別是存放整形、浮點型、字符的數組。
那么指針數組也就是存放指針變量的數組。
char* arr[5];//存放字符型指針的數組
int* arr2[4];//存放整型指針的數組
那么指針數組到底有什么用處呢???
我們可以用指針數組來模擬實現一個二維數組:
#include<stdio.h>
int main()
{
int arr1[] = { 1,2,3,4,5 };
int arr2[] = { 6,7,8,9,10 };
int arr3[] = { 11,12,13,14,15 };
int* arr[] = { arr1,arr2,arr3 };
int i = 0;
for (i = 0; i < 3; i++)
{
int j = 0;
for (j = 0; j < 5; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
我們已經知道數組名是數組首元素的地址,所以我們就可以直接將數組名傳入指針數組中,這樣我們就相當于直接得到了三行元素,并且可以用相同的方法進行打?。?/p>
雖然模擬出來二維數組的樣子,但其實并不是真的二維數組,我們知道二維數組的元素內存地址都是相連的,但這里我們所創(chuàng)建的三個數組都是互不相連的。
總結
指針的基礎知識到這里就要結束啦,希望小伙伴們都能有所收獲!
喜歡博主文章的小伙伴們不要忘記一鍵三連哦!下期我們將對結構體展開講解,一起期待一下叭!文章來源:http://www.zghlxwxcb.cn/news/detail-675497.html
我們下期再見!?文章來源地址http://www.zghlxwxcb.cn/news/detail-675497.html
到了這里,關于C語言基礎之——指針(下)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!