中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

[C語言]指針初階-創(chuàng)新互聯(lián)

[C語言]指針初階

10年積累的成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有南寧免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。文章目錄
  • [C語言]指針初階
    • 1.指針def:
    • 2.指針變量:
    • 3.指針和內(nèi)存的關(guān)系:
    • 4.指針和指針類型:
      • 4.1指針類型:
    • 5.指針+-整數(shù):
    • 6.指針的解引用:
    • 7.野指針:
      • 7.1成因:
      • 7.2如何規(guī)避野指針:
    • 8.指針運算:
      • 8.1指針+-整數(shù):
      • 8.2指針-指針:
      • 8.3指針的關(guān)系運算:
    • 9.指針和數(shù)組:
      • 9.1數(shù)組和指針的關(guān)系:
    • 10.指針數(shù)組:

📟作者主頁:慢熱的陜西人

🌴專欄鏈接: C語言

📣歡迎各位大佬👍點贊🔥關(guān)注🚓收藏,🍉留言

本博客簡單介紹了指針的概念和指針的初階的一些知識

1.指針def:

📣指針就是地址,口語中說的指針通常指的是指針變量

2.指針變量:

📣我們可以通過&(取地址操作符)取出變量的內(nèi)存其實地址,把地址可以存放到一個變量中,這個變量就是指針變量

3.指針和內(nèi)存的關(guān)系:

每一個字節(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次方倍;

4.指針和指針類型:

📣指針變量的大小都是相同的,為什么還要分很多種類: 決定了指針類型加減整數(shù),指針類型解引用可以操作的內(nèi)存空間大小

char  *pc = NULL;
int   *pi = NULL;
short *ps = NULL;
long  *pl = NULL;
float *pf = NULL;
double *pd = NULL;
4.1指針類型:

指針類決定了指針進行解引用操作的時候,訪問幾個字節(jié)(權(quán)限)

例如:

char*   //char類型指針每次解引用訪問只訪問一個字節(jié)
int*    //int類型指針每次解引用訪問只訪問四個字節(jié)
double* //double類型指針每次解引用訪問只訪問八個字節(jié)
5.指針±整數(shù):

📣指針的類型決定了指針向前或者向后走一步有多大(距離)

#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ī)避野指針:
  1. 指針初始化
  2. 小心指針越界
  3. 指針指向空間釋放,及時置NULL
  4. 避免返回局部變量的地址
  5. 指針使用之前檢查有效性

例如:

#includeint main()
{int *p = NULL;
    //....
    int a = 10;
    p = &a;
    if(p != NULL)
   {*p = 20;
   }
    return 0; }
8.指針運算:
  1. 指針± 整數(shù)
  2. 指針-指針 //指針+指針不可以(進階會解釋)
  3. 指針的關(guān)系運算
8.1指針±整數(shù):
#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; 
}

📣標(biāo)準(zhǔn)規(guī)定:

允許指向數(shù)組元素的指針指向數(shù)組最后一個元素后面的那個內(nèi)存位置的指針比較,但是不允許與 **指向第一個元素之前的那個內(nèi)存位置的指針**進行比較。

9.指針和數(shù)組: 9.1數(shù)組和指針的關(guān)系:

📣不同:

  • 數(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)

成都做網(wǎng)站
随州市| 澎湖县| 南平市| 唐海县| 西城区| 昭通市| 河南省| 衡南县| 红安县| 洪江市| 旬邑县| 阳信县| 黄梅县| 邵武市| 高邑县| 彝良县| 遂溪县| 玉林市| 青川县| 房产| 南宫市| 南陵县| 独山县| 阿拉善左旗| 婺源县| 莱州市| 申扎县| 锦州市| 凤山市| 宁夏| 梁河县| 海盐县| 高雄县| 探索| 遂溪县| 昂仁县| 分宜县| 蒲江县| 乌鲁木齐县| 中牟县| 黄骅市|