自學C day11 指標

2021-10-20 04:11:04 字數 1534 閱讀 6300

int a =

10;int

*p =

&a;

初始化必須是用位址給它初始化

使用:*p = 250 //指標的解引用/間接引用

*p:將p 變數的內容取出,當成位址看待,找到該位址對應的記憶體空間

如果做左值:存資料到空間中

如果做右值:取出空間中的內容

void *:萬能指標/泛型

指標的大小與型別無關,只與當前使用的平台架構有關

為了杜絕野指標,有了空指標

int

*p =

null..

..if(p !=

null

)

int

*p;*p =

1000

;嚴重性 ** 說明 專案 檔案 行 禁止顯示狀態

錯誤 c4700 使用了未初始化的區域性變數「p」 day05 c:\users\administrator\documents\visual studio 2015\projects\day05\day05\野指標和空指標cpp.cpp 11

2、p變數有乙個值,但該值不是可訪問的記憶體區域

int

*p =10;

*p =

2000

;

0-255這塊位址是確定留給作業系統的,會出現寫入許可權錯誤

指標必須要用位址來賦值

【杜絕野指標】

陣列名是位址常量——它不可以被修改,也就是說不可以被賦值

指標是變數,可以用陣列名給指標賦值

取陣列元素:a本質上就是*(a+2)

取陣列元素

int

*pint arr=

arr[0]

==*(p+0

)== p[0]

==*(p+0

)

const

int a =5;

int*p =

&a;*p =

650;

const int p;

可以修改p,但是不能修改p

int const p;

同上int * const p;

可以修改p,但是不能修改p

const int *const p;

兩個都不能改了

總結:const向右修飾,被修飾的部分即為唯讀

常用在函式形參內,用來限制指標所對應的記憶體空間為唯讀

1、指標是變數,陣列是常量

2、sizeof(指標) ==> 4/8 取決於平台

sizeof(陣列) ==》陣列的實際大小

3、指標++的操作:

a[0] == *(a+0)這裡的a是常量是不動的,所以要取元素的話,得向後移

int *p = a;

*p == (p+0) == p[0] == a[0]

p++ p是變數,是可以動的,p++了之後就指向了下乙個元素,要取出來的話直接p就行了

自學C day11 陣列做函式引數

三種寫法均可 void bubblesort int arr 10 void bubblesort int arr void bubblesort int arr 陣列做函式引數時,傳遞的不再是整個陣列,而是陣列的首位址,等價於 arr,大小就是乙個指標的大小,所以求sizeof就會出問題了 在自定...

C Day4 指標和結構體

二 結構體 include using namespace std intmain 32位作業系統 64位作業系統 4位元組 所有型別int float double 8位元組 所有型別 int s int 0x1124 cout 指標的值 sconst既修飾指標又修飾常量。const int co...

c day3 指標,棧記憶體,堆記憶體

在c 中指標就是 記憶體位址 十六進製制的資料 它記錄著記憶體空間的位址,大小是8個位元組 指標的定義 int a 10 int pint pint a 也可以 int pint a 其中 pint 指標變數儲存的就是 a變數在記憶體中的位址,可以通過 pint 解引用來效果 變數a 的值 pint...