日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀] 一、指針是地址各種類型的數據被分配合適的內存。比如整形數據通常被分配兩個連續(xù)的存儲單元(字節(jié))存放。對數據的訪問是通過分配給數據的內存首地址來實現的。我們稱這些內存地址為指針。二、指針變量是

一、指針是地址
各種類型的數據被分配合適的內存。比如整形數據通常被分配兩個連續(xù)的存儲單元(字節(jié))存放。對數據的訪問是通過分配給數據的內存首地址來實現的。我們稱這些內存地址為指針。


二、指針變量是存放地址的變量
如果我們定義了一些變量來存放數據的地址(指針),這樣的變量就是指針變量。也就是說,指針變量有兩個特征:首先它作為變量會分配內存空間;其次,它存放的內容應該是內存地址。

比如,當我們聲明了一個整形變量i并且賦予初始值10;同時我們聲明了一個整形的指針變量p,將它指向變量i。當我們運行代碼時,內存中可能是這樣的:

i -> |0AH| FFF0H

|00H|FFF1H
|...|
p -> |0F0H | FFFAH

|0FFH|FFFBH

三、一維數組是指針,它指向數組首(元素)地址
1. 代碼int a[3] = {1, 2, 3}; 定義了一個包含3個元素的整形一維數組。在引用數組元素時,我們使用“a[下標]”的格式;在引用數組時,我們直接使用數組名a。而數組名a表示(指向)數組首元素的地址(指針)

測試代碼:
int a[3] = {1, 2, 3};
printf("a = %xn", a);
printf("&a[0] = %xn", &a[0]);

執(zhí)行結果:
a= fff0
&a[0] = fff0


2. 由于一維數組是指針,所以可以按照指針來操作它: 一維數組指向數組首元素,所以在一維數組前加一元操作符“*”可以返回第一個元素的值。比如:


測試代碼:
int a[3] = {1, 2, 3};
printf("*a = %xn", *a);
printf("a[0] = %xn", a[0]);

執(zhí)行結果:
*a= 1
a[0] = 1


四、一維數組(名)不是指針變量
上面的測試代碼中,數組名a是一個指針變量嗎? 如果數組名a是一個指針變量,那么,它在應該會被分配獨立的存儲空間(有自己的地址),并且它的值應該是數組首地址,如圖:


指針變量a -> | 0F0H | xxxxH

| 0FFH | yyyyH

...
元素a[0]-> |01H| FFF0H

|00H| FFF1H
|02H| FFF2H
|00H| FFF3H
|03H| FFF4H
|00H| FFF5H

下面,我們再做一個試驗:
int a[3] = {1, 2, 3};
printf("&a = %xn", &a);
printf("a= %xn", a);
printf("*a = %xn", *a);
printf("a[0] = %xn", a[0]);

執(zhí)行結果:
&a = fff0
a= fff0
*a = fff0
a[0] = 1


執(zhí)行結果很奇怪,如果按照結果畫出內存示意圖,似乎是這樣的:


指針變量a -> | 0F0H |FFF0H

| 0FFH |FFF1H

...
元素a[0]-> |01H|FFF0H

|00H|FFF1H
|02H| FFF2H
|00H| FFF3H
|03H| FFF4H
|00H| FFF5H


奇怪在哪里? ------ 怎么可能有兩個內存空間的地址相同呢(FFF0H)? 當然不可能,這正好說明數組名a并不是一個指針變量因為它沒有自己的存貯空間。這些奇怪的結果是編譯器在編譯期間根據另外的規(guī)則做出的處理。


本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

在計算機編程領域,指針是C/C++等語言中強大而靈活的工具,而指針算術則是挖掘指針潛力的關鍵技術之一。其中,利用偏移量進行數組操作是指針算術的典型應用,它能顯著提升代碼的執(zhí)行效率,為高性能計算開辟新路徑。

關鍵字: 指針算術 指針 C語言

數組和指針在使用上還有一些區(qū)別。首先,數組名代表整個數組,可以用來初始化其他數組,但數組名不能被賦值或自增。其次,數組在函數調用時,傳遞的是數組的地址,而不是整個數組。指針可以被賦值或自增。指針還可以用來動態(tài)分配內存空間...

關鍵字: 數組 指針

在C語言編程中,指針是一個強大且靈活的工具,它允許直接訪問和操作內存地址。然而,正是這種直接性使得指針成為了一個容易出錯和難以調試的特性。本文將深入解析C語言中的指針概念,探討其工作原理,并揭示常見的指針陷阱及其避免方法...

關鍵字: C語言 指針

引用與指針在帶來便利的也會因為使用不當而導致一些難以調試的錯誤。比如,引用的一個常見問題是循環(huán)引用,它可能會導致程序出現內存泄漏的風險。而指針則更為復雜,容易出現懸空指針的情況,即指針指向的內存已經被釋放,但指針本身還保...

關鍵字: 引用 指針

指針傳遞參數本質上是值傳遞的方式,它所傳遞的是一個地址值。值傳遞過程中,被調函數的形式參數作為被調函數的局部變量處理,即在棧中開辟了內存空間以存放由主調函數放進來的實參的值,從而成為了實參的一個副本。值傳遞的特點是被調函...

關鍵字: 指針 引用

數據結構是抽象的概念,沒有語言之別,就像是設計模式一樣,是一種抽象的思想,用任何語言的代碼都能構建出來。而我們的python中的字符串,列表,字典,元祖,集合都是基本數據類型,他們是依附于語言存在的,不同的語言有不同的基...

關鍵字: 數組 堆棧

在MCU(微控制器單元)軟件開發(fā)中,指針作為一種強大的工具,能夠顯著提高程序的靈活性和性能。然而,指針的使用也伴隨著一系列潛在的風險和陷阱,特別是在資源受限的嵌入式系統(tǒng)中。本文將深入探討MCU軟件開發(fā)中使用指針時可能遇到...

關鍵字: MCU 軟件開發(fā) 指針

懸空指針(Dangling Pointer)和野指針(Wild Pointer)是C語言中指針使用不當時常見的兩種錯誤情況。懸空指針產生于指針指向的內存被釋放后,該指針未置為空、而仍指向原地址,如此會導致潛在的安全隱患和...

關鍵字: C語言 指針

作為嵌入式工程師,寫一個效率高效,思路清晰的C語言程序是我們的終極目標,那么,怎么才能寫好這樣的程序呢?首先,我們要用C語言的思維方式來進行程序的構架構建;其次,要有良好的C語言算法基礎,以此來實現程序的邏輯構架;最后,...

關鍵字: C語言 指針

指針和內存泄漏對某些程序員來說似乎是一種威懾,但是,一旦你了解了指針和相關內存操作的基礎知識,它們將成為你在 C 中擁有的最強大的工具。

關鍵字: C語言 指針
關閉