
📟作者主頁:慢熱的陜西人
🌴專欄鏈接: C語言
📣歡迎各位大佬👍點(diǎn)贊🔥關(guān)注🚓收藏,🍉留言
1.指針def:本博客簡單介紹了指針的概念和指針的初階的一些知識(shí)
2.指針變量:📣指針就是地址,口語中說的指針通常指的是指針變量
3.指針和內(nèi)存的關(guān)系:📣我們可以通過&(取地址操作符)取出變量的內(nèi)存其實(shí)地址,把地址可以存放到一個(gè)變量中,這個(gè)變量就是指針變量
4.指針和指針類型:每一個(gè)字節(jié)(一個(gè)基本的內(nèi)存單元)都有一個(gè)地址,在32位的機(jī)器上指針變量的大小就是4個(gè)字節(jié),因?yàn)?2位的二進(jìn)制數(shù)字只能編址:4 GB原理如下:
(2 ^ 32 Byte == 2^32/1024 KB ==2^32 / 1024 / 1024 MB ==2^32/1024/1024/1024 GB == 4 GB) 4 G的空間進(jìn)行編址。
如果是在64位機(jī)器上,指針變量的大小就是8個(gè)字節(jié),八個(gè)字節(jié)的二進(jìn)制數(shù)字可以編址的內(nèi)存空間大小是32位機(jī)器的2的32次方倍;
📣指針變量的大小都是相同的,為什么還要分很多種類: 決定了指針類型加減整數(shù),指針類型解引用可以操作的內(nèi)存空間大小
char *pc = NULL;
int *pi = NULL;
short *ps = NULL;
long *pl = NULL;
float *pf = NULL;
double *pd = NULL;4.1指針類型:5.指針±整數(shù):指針類決定了指針進(jìn)行解引用操作的時(shí)候,訪問幾個(gè)字節(jié)(權(quán)限)
例如:
char* //char類型指針每次解引用訪問只訪問一個(gè)字節(jié) int* //int類型指針每次解引用訪問只訪問四個(gè)字節(jié) double* //double類型指針每次解引用訪問只訪問八個(gè)字節(jié)
📣指針的類型決定了指針向前或者向后走一步有多大(距離)
#include//演示實(shí)例
int main()
{int n = 10;
char *pc = (char*)&n;
int *pi = &n;
printf("%p\n", &n);
printf("%p\n", pc);
printf("%p\n", pc+1);
printf("%p\n", pi);
printf("%p\n", pi+1);
return 0; } 6.指針的解引用:📣指針的類型決定了,對(duì)指針解引用的時(shí)候有多大的權(quán)限(能操作幾個(gè)字節(jié))。 比如: char* 的指針解引用就只能訪問一個(gè)字節(jié),而 int* 的指針的解引用就能訪問四個(gè)字節(jié)。
//演示實(shí)例
#includeint main()
{int n = 0x11223344;
char *pc = (char *)&n;
int *pi = &n;
*pc = 0; //重點(diǎn)在調(diào)試的過程中觀察內(nèi)存的變化。
*pi = 0; //重點(diǎn)在調(diào)試的過程中觀察內(nèi)存的變化。
return 0; } 7.野指針:7.1成因:📣野指針就是指針指向的位置是不可知的(隨機(jī)的、不正確的、沒有明確限制的)
(1)指針未初始化:
#includeint main()
{ int *p;//局部變量指針未初始化,默認(rèn)為隨機(jī)值
*p = 20;
return 0; } (2)指針越界訪問:
#includeint main()
{int arr[10] = {0};
int *p = arr;
int i = 0;
for(i=0; i<=11; i++)
{//當(dāng)指針指向的范圍超出數(shù)組arr的范圍時(shí),p就是野指針
*(p++) = i;
}
return 0; } (3)指針指向的空間釋放;
7.2如何規(guī)避野指針:
- 指針初始化
- 小心指針越界
- 指針指向空間釋放,及時(shí)置NULL
- 避免返回局部變量的地址
- 指針使用之前檢查有效性
例如:
#includeint main()
{int *p = NULL;
//....
int a = 10;
p = &a;
if(p != NULL)
{*p = 20;
}
return 0; } 8.指針運(yùn)算:8.1指針±整數(shù):
- 指針± 整數(shù)
- 指針-指針 //指針+指針不可以(進(jìn)階會(huì)解釋)
- 指針的關(guān)系運(yùn)算
#define N_VALUES 5
float values[N_VALUES];
float *vp;
//指針+-整數(shù);指針的關(guān)系運(yùn)算
for (vp = &values[0]; vp< &values[N_VALUES];)
{
*vp++ = 0;
}8.2指針-指針:int my_strlen(char *s) { char *p = s;
while(*p != '\0' )
p++;
return p-s; }8.3指針的關(guān)系運(yùn)算:📣指針可以比較大小
for(vp = &values[N_VALUES]; vp >&values[0];)
{
*--vp = 0;
}
for(vp = &values[N_VALUES-1]; vp >= &values[0];vp--)
{
*vp = 0;
}9.指針和數(shù)組: 9.1數(shù)組和指針的關(guān)系:📣標(biāo)準(zhǔn)規(guī)定:
允許指向數(shù)組元素的指針與指向數(shù)組最后一個(gè)元素后面的那個(gè)內(nèi)存位置的指針比較,但是不允許與 **指向第一個(gè)元素之前的那個(gè)內(nèi)存位置的指針**進(jìn)行比較。
📣不同:
- 數(shù)組和指針不是一個(gè)東西
- 數(shù)組能夠存放一組數(shù),連續(xù)的空間,數(shù)組的大小取決于元素個(gè)數(shù)
- 指針是一個(gè)變量,是存放地址的,4/8個(gè)字節(jié)
📣聯(lián)系:
- 數(shù)組名是地址(指針)
- 數(shù)組把首元素的地址,交給一個(gè)指針變量后可以通過指針變量來訪問數(shù)組
指針和數(shù)組關(guān)系應(yīng)用示例:
#includeint main()
{int arr[] = {1,2,3,4,5,6,7,8,9,0};
int *p = arr; //指針存放數(shù)組首元素的地址
int sz = sizeof(arr)/sizeof(arr[0]);
for(i=0; iprintf("&arr[%d] = %p<====>p+%d = %p\n", i, &arr[i], i, p+i);
}
return 0; } [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-2G8rdykW-1670991890615)(C:\Users\jason\AppData\Roaming\Typora\typora-user-images\image-20221214122058161.png)]
10.指針數(shù)組:📣def:存放指針的數(shù)組;
兩種示例:
1.實(shí)現(xiàn)多個(gè)變量的指針的存儲(chǔ)
int main()
{int a = 10;
int b = 20;
int c = 30;
int d = 40;
int e = 50;
int* arr3[5] = {&a, &b, &c, &d, &e};//存放整型指針的數(shù)組
int i = 0;
for (i = 0; i< 5; i++)
{printf("%d ", *(arr3[i]));
}
return 0;
}2.模擬實(shí)現(xiàn)二維數(shù)組
int main()
{//用一維數(shù)組模擬一個(gè)二維數(shù)組
int arr1[] = {1,2,3,4,5 };
int arr2[] = {2,3,4,5,6 };
int arr3[] = {3,4,5,6,7 };
int arr4[] = {4,5,6,7,8 };
int* arr[4] = {arr1, arr2, arr3, arr4};
int i = 0;
for (i = 0; i< 4; i++)
{int j = 0;
for (j = 0; j< 5; j++)
{ printf("%d ", *(*(arr+i)+j));
}
printf("\n");
}?
到這本篇博客的內(nèi)容就到此結(jié)束了。
如果想要更加深入的了解指針可以關(guān)注博主接下來的指針進(jìn)階,內(nèi)容更加豐富和詳細(xì)!
如果覺得本篇博客內(nèi)容對(duì)你有所幫助的話,可以點(diǎn)贊,收藏,順便關(guān)注一下!
如果文章內(nèi)容有錯(cuò)誤,歡迎在評(píng)論區(qū)指正

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
當(dāng)前文章:[C語言]指針初階-創(chuàng)新互聯(lián)
新聞來源:http://www.chinadenli.net/article2/dgsioc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、網(wǎng)頁設(shè)計(jì)公司、移動(dòng)網(wǎng)站建設(shè)、動(dòng)態(tài)網(wǎng)站、全網(wǎng)營銷推廣、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容