📟作者主頁:慢熱的陜西人
🌴專欄鏈接: C語言
📣歡迎各位大佬👍點贊🔥關(guān)注🚓收藏,🍉留言
1.指針def:本博客簡單介紹了指針的概念和指針的初階的一些知識
2.指針變量:📣指針就是地址,口語中說的指針通常指的是指針變量
3.指針和內(nèi)存的關(guān)系:📣我們可以通過&(取地址操作符)取出變量的內(nèi)存其實地址,把地址可以存放到一個變量中,這個變量就是指針變量
4.指針和指針類型:每一個字節(jié)(一個基本的內(nèi)存單元)都有一個地址,在32位的機器上指針變量的大小就是4個字節(jié),因為32位的二進制數(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的空間進行編址。
如果是在64位機器上,指針變量的大小就是8個字節(jié),八個字節(jié)的二進制數(shù)字可以編址的內(nèi)存空間大小是32位機器的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ù):指針類決定了指針進行解引用操作的時候,訪問幾個字節(jié)(權(quán)限)
例如:
char* //char類型指針每次解引用訪問只訪問一個字節(jié) int* //int類型指針每次解引用訪問只訪問四個字節(jié) double* //double類型指針每次解引用訪問只訪問八個字節(jié)
📣指針的類型決定了指針向前或者向后走一步有多大(距離)
#include//演示實例
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.指針的解引用:📣指針的類型決定了,對指針解引用的時候有多大的權(quán)限(能操作幾個字節(jié))。 比如: char* 的指針解引用就只能訪問一個字節(jié),而 int* 的指針的解引用就能訪問四個字節(jié)。
//演示實例
#includeint main()
{int n = 0x11223344;
char *pc = (char *)&n;
int *pi = &n;
*pc = 0; //重點在調(diào)試的過程中觀察內(nèi)存的變化。
*pi = 0; //重點在調(diào)試的過程中觀察內(nèi)存的變化。
return 0; }
7.野指針:7.1成因:📣野指針就是指針指向的位置是不可知的(隨機的、不正確的、沒有明確限制的)
(1)指針未初始化:
#includeint main()
{ int *p;//局部變量指針未初始化,默認(rèn)為隨機值
*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的范圍時,p就是野指針
*(p++) = i;
}
return 0; }
(3)指針指向的空間釋放;
7.2如何規(guī)避野指針:
- 指針初始化
- 小心指針越界
- 指針指向空間釋放,及時置NULL
- 避免返回局部變量的地址
- 指針使用之前檢查有效性
例如:
#includeint main()
{int *p = NULL;
//....
int a = 10;
p = &a;
if(p != NULL)
{*p = 20;
}
return 0; }
8.指針運算:8.1指針±整數(shù):
- 指針± 整數(shù)
- 指針-指針 //指針+指針不可以(進階會解釋)
- 指針的關(guān)系運算
#define N_VALUES 5
float values[N_VALUES];
float *vp;
//指針+-整數(shù);指針的關(guā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)系運算:📣指針可以比較大小
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ù)組最后一個元素后面的那個內(nèi)存位置的指針比較,但是不允許與 **指向第一個元素之前的那個內(nèi)存位置的指針**進行比較。
📣不同:
- 數(shù)組和指針不是一個東西
- 數(shù)組能夠存放一組數(shù),連續(xù)的空間,數(shù)組的大小取決于元素個數(shù)
- 指針是一個變量,是存放地址的,4/8個字節(jié)
📣聯(lián)系:
- 數(shù)組名是地址(指針)
- 數(shù)組把首元素的地址,交給一個指針變量后可以通過指針變量來訪問數(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)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-2G8rdykW-1670991890615)(C:\Users\jason\AppData\Roaming\Typora\typora-user-images\image-20221214122058161.png)]
10.指針數(shù)組:📣def:存放指針的數(shù)組;
兩種示例:
1.實現(xiàn)多個變量的指針的存儲
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.模擬實現(xiàn)二維數(shù)組
int main()
{//用一維數(shù)組模擬一個二維數(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)注博主接下來的指針進階,內(nèi)容更加豐富和詳細(xì)!
如果覺得本篇博客內(nèi)容對你有所幫助的話,可以點贊,收藏,順便關(guān)注一下!
如果文章內(nèi)容有錯誤,歡迎在評論區(qū)指正
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
當(dāng)前文章:[C語言]指針初階-創(chuàng)新互聯(lián)
新聞來源:http://www.rwnh.cn/article2/dgsioc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計公司、移動網(wǎng)站建設(shè)、動態(tài)網(wǎng)站、全網(wǎng)營銷推廣、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容