使用指標時,可以通過解引用的方式來找到指標指向的記憶體
指標前用星號 * 代表解引用,找到指標指向的記憶體中的資料
(網友說:& 和 * 是起相反作用的 兩個符號)
在32位作業系統下,指標占用4個位元組空間;64位 --> 8個位元組
(vs和dev編譯器都可以自己選擇用64位還是32位對**進行編譯)
空指標:指標變數指向記憶體中編號為0的空間
用途:初始化指標變數
注意:空指標指向的記憶體是不可以訪問的
記憶體編號 0~255 為系統占用記憶體,不允許使用者訪問
int * p = null;
*p = 100; // 會報錯,0~255 不能自己寫
野指標:指標變數指向非法的記憶體空間
總結:空指標和野指標都不是我們自己申請的空間,因為不要訪問,會報錯。
const修飾指標有三種情況:
int a =10;
int b =20;
int* p =
&a;
const int * p =
&a;
常量指標
特點:指標的指向可以修改,但是指標指向的值不可以修改
比如:*p = 30; // 錯誤,指標指向的值不可以修改
p = &b; // 正確,指標指向可以修改
int * const p =
&a;
指標常量
特點:指標的指向不可以改,指標指向的值可以改
比如:*p = 30; // 正確,指標指向的值可以修改
p = &b; // 錯誤,指標指向不可以修改
const int * const p =
&a;
特點:指標的指向和指標指向的值都不可以修改
怎麼記:看到 * 就是指標,看到 const 就是「常量」(固定死、不可修改的意思)
**:
#include
using
namespace std;
// 定義指標
intmain()
執行結果:
指標 p 為:0x22fe34
a=:1000
*p=:1000
sizeof(int*)
= 8sizeof(int*)
= 8請按任意鍵繼續. .
.作用:利用指標訪問陣列中的元素
我有乙個疑問:
陣列的元素,乙個佔 4個位元組
(64位系統)指標占用 8 個位元組
當指標 偏移乙個單位時,不就是偏移8個位元組嗎?
為什麼 for 迴圈裡可以正常迴圈10次,正常輸出 所有陣列元素呢?
在q群裡問了網友,網友說:指標偏移指的是 它指向的物件 做偏移
有兩個網友的帖子可以參考一下
c語言指標偏移技巧
c語言中的指標加減偏移量
**:
#include
using
namespace std;
// 指標和陣列
intmain()
; cout<<
sizeof
(arr[0]
)
// 陣列名就是陣列的首位址
cout<<
sizeof
(int*)
/ cout<<"利用指標訪問第乙個元素"<<*p// cout<<"利用指標訪問第二個元素"<<*p"所有元素:"
int i =
0;i<
10;i++
) cout
("pause");
return0;
}
執行結果:
4
8所有元素:
1 2 3 4 5 6 7 8 9 10
請按任意鍵繼續. .
.
作用:利用指標作函式引數,可以修改實參的值
注意(網友說的):
位址傳遞同樣會開闢記憶體空間,資料型別就是指標變數
也就是說,除非指標指向了結構體,否則省記憶體就是無稽之談
值傳遞: 修改函式內部,但是不修改main
**:
#include
using
namespace std;
void
swap
(int a,
int b)
void
swap02
(int
* p1,
int* p2)
intmain()
執行結果:
值傳遞函式內部
a = 2
b = 1
值傳遞後 main
a = 1
b = 2
位址傳遞函式內部
a = 2
b = 1
位址傳遞後 main
a = 2
b = 1
請按任意鍵繼續. .
.
指標、陣列、函式
案例描述:封裝乙個函式,利用氣泡排序,實現對整型陣列的公升序排序
#include
using
namespace std;
// 氣泡排序函式
void
bubblesort
(int
* arr,
int len)
// int * arr 也可以寫成 int arr}}
}// 列印陣列
void
printarray
(int
* arr,
int len)
cout<}int
main()
;int len =
sizeof
(arr)
/sizeof
(arr[0]
);bubblesort
(arr,len)
;printarray
(arr,len)
;system
("pause");
return0;
}
執行結果:
1 2 3 4 5 6 7 8 9 10
請按任意鍵繼續. .
.
C 入門基礎Chapeter05指標
1 定義指標 int a 10 指標定義的語法 資料型別 指標變數名 int p 讓指標記錄變數a的位址 p a 輸出的為16進製制的位址 cout 指標p為 p endl 輸出結果為 指標p為 0079fbb0 2 使用指標 作用 可以通過解引用的方式來找到指標指向的記憶體 解引用 p 在指標的前...
C部落格作業05 指標
展示關於 指標題目集 分數截圖。每個知識點具體展開介紹。包括指標如何指向字串 字串相關函式及函式 原型的理解 字串相關函式用法 擴充套件課堂未介紹內容 具體格式是什麼,注意事項。為什麼要動態記憶體分配,堆區和棧區區別。動態記憶體分配相關函式及用法。舉例為多個字串做動態記憶體要如何分配。多個字串用二維...
C語言部落格05 指標
本章學習了指標的應用,指標是c語言中很有特色的乙個東西,其他的語言基本沒有這個功能,直接在記憶體上對變數賦值,同時也學到了很多函式可應用在字串中運用比如strlen strcat strcmp等等,對陣列的大小進行控制也學到了乙個新的方法,動態記憶體分配,可以對陣列的大小進行控制,防止像以前那樣給陣...