国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

『C語言初階』第七章 -初識指針

這篇具有很好參考價值的文章主要介紹了『C語言初階』第七章 -初識指針。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

『C語言初階』第七章 -初識指針,C語言初階知識,c語言,c++

??博客主頁 小羊失眠啦.
??系列專欄 C語言
???每日語錄苦難是化了妝的祝福。
??感謝大家點贊??收藏?評論??


『C語言初階』第七章 -初識指針,C語言初階知識,c語言,c++

前言

時隔多日小羊又來給鐵汁們更新C語言之初識指針,指針是C語言中一個關鍵且強大的概念,理解和掌握指針對于編寫高效、靈活的程序至關重要。本文將詳細解釋C語言中的指針,幫助初學者邁出掌握編程世界的第一步。


一、指針是什么?

  1. 指針是內(nèi)存中一個最小單元的編號,也就是地址
  2. 一般我們所說的指針,通常是指指針變量,用來存放內(nèi)存地址的變量

1.內(nèi)存

程序在運行時候會在內(nèi)存中被調用,運行時占用內(nèi)存的空間。
內(nèi)存就像一棟樓,里面有很多房間,每一戶人家(每一塊內(nèi)存)都有一個門牌號,而這個門牌號就相當于內(nèi)存編號,我們就可以通過編號找到相對應的內(nèi)存(值)。
編號也被稱為地址,不同內(nèi)存塊所對應的地址也不一樣。

2.指針變量

指針變量也是一種變量,只不過是用來存儲地址的變量
我們可以通過&(取地址操作符)取出變量的內(nèi)存起始地址,把該地址存放到一個變量中,這個變量就是指針變量

#include<stdio.h>
int main()
{
	int a = 5;
	int* p = &a;//取出a的地址存放到變量p中
	printf("%p\n", &a);
	printf("%p", p);
	return 0;
}

『C語言初階』第七章 -初識指針,C語言初階知識,c語言,c++

總結:指針是一個變量,但它存儲的是另一個變量的內(nèi)存地址,而不是直接存儲數(shù)據(jù)本身。可以將指針看作是數(shù)據(jù)的"門牌號碼",通過它可以找到內(nèi)存中存儲的實際數(shù)據(jù)。

3.指針大小

在32位電腦上,地址是32個0或者1組成二進制序列,那地址就是32b(位)=4B(字節(jié))的空間來存儲,所以一個指針變量的大小就是4個字節(jié)。
相應的在64位機器上,64b=8B,一個指針變量大小就是8個字節(jié)。

總結:
1. 指針是用來存放地址的,地址是唯一標識一塊內(nèi)存單元的。
2. 指針大小在32位平臺上是4個字節(jié),在64位平臺是8個字節(jié)。


二、指針類型

指針變量是變量,變量有很多類型,那指針變量的類型也是如此。
當我們需要指向不同類型的變量時,就需要創(chuàng)建不同類型的指針變量。

	char* p1 = NULL;//創(chuàng)建一個char類型的指針,并初始化為空指針
	int* p2 = NULL;//創(chuàng)建一個int類型的指針,并初始化為空指針
	short* p3 = NULL;
	long* p4 = NULL;
	float* p5 = NULL;
	double* p6 = NULL;

所以指針的定義方式為:類型 + * = 值。

解讀:

  1. char*類型指針是為了存放char類型變量的地址
  2. int*類型指針是為了存放int類型變量的地址
  3. double*類型指針是為了存放double類型變量的地址

注意:
指針大小與指針類型無關,指針大小與計算機(32位或者64位有關)

1.指針類型的作用

從上面代碼可知,不同類型指針大小相同,那么指針類型的意義是什么呢?

用法示例

#include <stdio.h>
int main()
{
	int n = 10;
	char* p1 = (char*)&n;//將int類型地址強制轉化為char類型
	int* p2 = &n;
 
	printf("%p\n", &n);
	printf("%p\n", p1);
	printf("%p\n", p1 + 1);
	printf("%p\n", p2);
	printf("%p\n", p2 + 1);
	return  0;
}

『C語言初階』第七章 -初識指針,C語言初階知識,c語言,c++

我們發(fā)現(xiàn):
當指針為char類型時,指針+1,步長為1
當指針為int
類型時,指針+1,步長為4

總結:不同類型的指針變量決定了指針向前或向后走一步有多大(距離),即步長。

2.指針的解引用

我們知道,指針保存內(nèi)存的地址,那指針的作用是什么呢?
我們可以通過指針保存的地址,來訪問內(nèi)存中的目標變量,并將其修改,這就需要使用指針的解引用操作。

用法示例

#include <stdio.h>
int main()
{
	int n = 0x11223344;
	char* p1 = (char*)&n;
	int* p2 = &n;
	*p1 = 0;   
	*p2 = 0;   
	printf("%#x\n", n);
	printf("%#x\n", p1);
	return 0;
}

『C語言初階』第七章 -初識指針,C語言初階知識,c語言,c++

分析:
因為p2是int類型指針變量,所以能訪問四個字節(jié)的空間,*p2=0,將n的值修改為0;
但是p1是char類型指針變量,所以只能訪問一個字節(jié)的空間,那為何又是修改地址中的44而不是11呢,后面文章會詳解大小端的知識。

總結:

  1. 指針的類型決定指針加減整數(shù)時所跳過的步長
  2. 指針的類型決定了,對指針解引用的時候有多大的權限(能操作幾個字節(jié))

三、野指針

概念:野指針就是指針的位置是不可知的(隨機的、不正確的、沒有正確限制的)指針。
野指針很危險,它訪問的空間不可知,從而導致出現(xiàn)的可能情況有:

  1. 指針未初始化
  2. 指針越界或者非法訪問
  3. 指針指向的空間被釋放了(例:局部變量)

用法示例

#include <stdio.h>
int main()
{
	//1>:
	int* p1;
	*p1 = 5;
	//此時p1就是一個野指針。

	//2>:
	int arr[10] = { 0 };
	int i = 0;
	int* p2 = arr;//p指向數(shù)組的首地址
	for (i = 0; i < 11; i++)
	{
		*(p2++)=i;
	}
	//當p2指向的空間超過數(shù)組的最后一個元素時,指針就非法訪問,即越界訪問了未知空間。
	//此時p2是野指針。

	//3>:
	int j = 0;
	for (j = 0; j < 5; j++)
	{
		int a = 5;
		a += 1;
	}
	int* p3 = &a;//當循環(huán)結束之后,局部變量a向內(nèi)存申請的空間就被釋放了。
	//此時p3指針指向的空間就是已經(jīng)被釋放掉的空間。p3就是野指針。

	return 0;
}

如何規(guī)避野指針

  • 指針初始化
  • 小心指針越界
  • 指針指向空間釋放及時置NULL
  • 避免返回局部變量的地址
  • 指針使用之前檢查有效性

四、指針的運算

1.指針加減整數(shù)

用法示例

例:打印一維數(shù)組

#include<stdio.h>
int main()
{
	int arr[5] = { 1,2,3,4,5 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int i = 0;
	int* p = arr;
	for (i = 0; i < 5; i++)
		printf("%d ", *p + i);
	return 0;
}

2.指針-指針

指針減指針可以用來計算字符數(shù)組的長度或字符串的長度

用法示例

#include <stdio.h>
int my_strlen(char* s)
{
	char* p = s;
	while (*p != '\0')
		p++;
	return p - s;
}
int main()
{
	char str[] = "hello world";
	int len = my_strlen(str);
	printf("%d", len);
	return 0;
}

3.指針的關系運算

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


五、二級指針

指針變量也是變量,變量有地址,那么指針變量的地址存放在哪里?
這時候就來了解二級指針!

#include <stdio.h>
int main()
{
	int a = 10;
	int* p1 = &a;
	int** p2 = &p1;//p2就是二級指針,指向p1
	**p2 = 6;
	printf("%d", a);
	return 0;
}

『C語言初階』第七章 -初識指針,C語言初階知識,c語言,c++
a的地址存放在p1中,p1的地址存放在p2中
p1是一級指針,而p2是二級指針
**p2=6通過第一次解引用找到p1,再第二次解引用找到a,將其修改為6

以此還有三級指針和其他多級指針,常見的就是一級和二級指針


指針的注意事項

  • 指針操作前應該初始化,避免出現(xiàn)未定義行為。
  • 指針可以進行比較操作,但僅在指向同一數(shù)組中的元素時才有意義。
  • 避免野指針(指向未知內(nèi)存區(qū)域的指針)的使用,這可能導致程序崩潰。

結論:

初學者理解指針是學習C語言的重要一步,它使得程序可以更加靈活和高效地操作內(nèi)存。通過掌握指針的基本概念、操作和用途,可以構建出更加復雜和強大的C語言程序。逐步練習并在實際項目中應用指針,將有助于加深對指針的理解和熟練掌握。


『C語言初階』第七章 -初識指針,C語言初階知識,c語言,c++
小羊希望本文對初學者理解C語言中的指針概念提供了一些幫助。在進一步學習過程中,還請查閱相關文檔和示例以加深理解,咱們下期再見~~文章來源地址http://www.zghlxwxcb.cn/news/detail-639536.html

到了這里,關于『C語言初階』第七章 -初識指針的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 第七章 圖論

    第七章 圖論

    第七章 圖論 一、數(shù)據(jù)結構定義 圖的鄰接矩陣存儲法 圖的鄰接表存儲法 把所有節(jié)點存儲為節(jié)點數(shù)組,每個節(jié)點里有自己的數(shù)據(jù)和一個邊指針,這個邊指針相當于一個鏈表的頭指針,這個鏈表里存放所有與這個節(jié)點相連的邊,邊里存放該邊指向的節(jié)點編號和下一條邊指針 圖的

    2024年02月14日
    瀏覽(79)
  • 第七章 函數(shù)矩陣

    第七章 函數(shù)矩陣

    和矩陣函數(shù)不同的是,函數(shù)矩陣本質上是一個矩陣,是以函數(shù)作為元素的矩陣。 矩陣函數(shù)本質上是一個矩陣,是以矩陣作為自變量的函數(shù)。 函數(shù)矩陣和數(shù)字矩陣的運算法則完全相同。 不過矩陣的元素 a i j ( x ) a_{ij}(x) a ij ? ( x ) 需要是閉區(qū)間 [ a , b ] [a,b] [ a , b ] 上的實函數(shù)

    2024年02月04日
    瀏覽(22)
  • 第七章金融中介

    ?? ? ? ? 金融中介是通過向資金盈余者發(fā)行 間接融資合約( 如存款單),并和資金短缺者達成 間接投資合約 (發(fā)放信貸)或購買其發(fā)行的證券,在資金供求方之間融通資金,對資金跨期、跨域進行優(yōu)化配置的金融機構。 ? ? ? ? 金融體系由金融市場和金融中介構成,以銀行業(yè)為

    2024年02月04日
    瀏覽(27)
  • python第七章(字典)

    python第七章(字典)

    一。字典(類型為dict)的特點: 1.符號為大括號 2.數(shù)據(jù)為鍵值對形式出現(xiàn) 3.各個鍵值對之間以逗號隔開 格式:str1={\\\'name\\\':\\\'Tom\\\'}? name相當于鍵值(key),Tom相當于值 二??兆值涞膭?chuàng)建方法 三。字典的基本操作(增刪改查) 1.字典的增加操作:字典序列[key] = 值 注意點:如果存

    2024年01月24日
    瀏覽(46)
  • 第七章 測試

    第七章 測試

    7.1.1 選擇程序設計語言 1. 計算機程序設計語言基本上可以分為匯編語言和高級語言 2. 從應用特點看,高級語言可分為基礎語言、結構化語言、專用語言 01 有理想的模塊化機制; 02 可讀性好的控制結構和數(shù)據(jù)結構; 03 便于調試和提高軟件可靠性; 04 編譯程序發(fā)現(xiàn)程序錯誤的

    2024年02月08日
    瀏覽(29)
  • [JavaScript] 第七章 對象

    [JavaScript] 第七章 對象

    ??作者主頁:青花鎖 ??簡介:Java領域優(yōu)質創(chuàng)作者??、Java微服務架構公號作者?? ??簡歷模板、學習資料、面試題庫、技術互助 ??文末獲取聯(lián)系方式 ?? [Java項目實戰(zhàn)] 介紹Java組件安裝、使用;手寫框架等 [Aws服務器實戰(zhàn)] Aws Linux服務器上操作nginx、git、JDK、Vue等 [Java微服務

    2024年02月02日
    瀏覽(61)
  • 數(shù)據(jù)結構第七章

    數(shù)據(jù)結構第七章

    圖(Graph)G由兩個集合V和E組成,記為G=(V, E),其中V是頂點的有窮非空集合,E是V中頂點偶對的有窮集合,這些頂點偶對稱為邊。V(G)和E(G)通常分別表示圖G的頂點集合和邊集合,E(G)可以為空集。若EG)為空,則圖G只有頂點而沒有邊。 子圖:假設有兩個圖G=(V,E)和G1=(V1,E1);如果V1

    2024年02月03日
    瀏覽(27)
  • Flink第七章:狀態(tài)編程

    Flink第七章:狀態(tài)編程

    Flink第一章:環(huán)境搭建 Flink第二章:基本操作. Flink第三章:基本操作(二) Flink第四章:水位線和窗口 Flink第五章:處理函數(shù) Flink第六章:多流操作 Flink第七章:狀態(tài)編程 這次我們來學習Flink中的狀態(tài)學習部分,創(chuàng)建以下scala文件 這個文件里有幾個常用的狀態(tài)創(chuàng)建 按鍵分區(qū)中值狀態(tài)編程案

    2024年02月06日
    瀏覽(24)
  • C國演義 [第七章]

    C國演義 [第七章]

    力扣鏈接 給兩個整數(shù)數(shù)組 nums1 和 nums2 ,返回 兩個數(shù)組中 公共的 、長度最長的子數(shù)組的長度 。 示例 1: 輸入:nums1 = [1,2,3,2,1], nums2 = [3,2,1,4,7] 輸出:3 解釋:長度最長的公共子數(shù)組是 [3,2,1] 。 示例 2: 輸入:nums1 = [0,0,0,0,0], nums2 = [0,0,0,0,0] 輸出:5 提示: 1 = nums1.length, num

    2024年02月10日
    瀏覽(23)
  • 第七章 面向對象編程(基礎)

    (1)類是抽象的,概念的,代表一類事物,比如人類、貓類...?即它是數(shù)據(jù)類型。 (2)對象是具體的,實際的,代表一個具體事物,即實例。 (3)類是對象的模板,對象是類的一個個體,對應一個實例。 屬性是類的一個組成部分,一般是基本數(shù)據(jù)類型,也可是引用類型(對

    2024年02月06日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包