3.二維陣列
二、函式
三、指標
所謂陣列,就是乙個集合,裡面存放了相同型別的資料元素
特點1:陣列中的每個資料元素都是相同的資料型別
特點2:陣列是由連續的記憶體位置組成的
1.資料型別 陣列名 [ 陣列長度 ];
2.資料型別 陣列名 [ 陣列長度] = ;
3.資料型別 陣列名 [ ] =;
用途:
1.可以統計整個陣列在記憶體中的長度
2.可以獲取陣列在記憶體中的首位址
**如下(示例):
int arr[5]
=;cout <<
"整個陣列占用的記憶體空間:"
<<
sizeof
(arr)
/20
cout <<
"每個元素占用的記憶體空間:"
<<
sizeof
(arr[0]
)<< endl;
//4 cout <<
"陣列的元素個數:"
<<
sizeof
(arr)
/sizeof
(arr[0]
)/5
cout <<
"陣列首位址為:"
<< arr /0x70fdf0
cout <<
"陣列中第乙個元素位址為:"
<<
&arr[0]
/0x70fdf0
cout <<
"陣列中第二個元素位址為:"
<<
&arr[1]
/0x70fdf4
有四種方式:
1.·資料型別 陣列名 [ 行數 ] [ 列數 ];
2.資料型別 陣列名 [ 行數 ] [ 列數 ] = ,} ;
3.資料型別 陣列名 [ 行數 ] [ 列數 ] = ;
4.資料型別 陣列名 [ ] [ 列數 ] = ;
第二種更加直觀,提高**可讀性;
函式的定義一般有5個步驟:
返回值型別
函式名引數列表
函式體語句
return xx
**如下(示例):
返回值型別 函式名(int a,
int b)
功能:使用定義好的函式
語法:函式名(引數)
無參無返
有參無返
無參有返
有參有返
作用:讓**結構更加清晰
函式分檔案編寫一般有4個步驟:
1.建立字尾名為.h的標頭檔案
2.建立字尾名為.cpp的原始檔
3.在標頭檔案中寫函式的宣告
4.在原始檔中寫函式的定義
//標頭檔案swap.h
#include
using
namespace std;
//函式宣告
void
swap
(int a,
int b)
;
#include
"swap.h"
//函式的定義
void
swap
(int a,
int b)
#
include
#include
"swap.h"
using
namespace std;
intmain()
非靜態成員函式後面加const,表示成員函式隱含傳入的this指標為const指標,在該成員函式中,不能修改所在類中的成員變數
但可以修改有mutable
修飾的成員
加到非成員函式或靜態成員
後面會產生編譯錯誤
指標變數定義語法:資料型別 * 變數名 ;
**如下(示例):
#
include
using
namespace std;
intmain()
不管是什麼資料型別
32位作業系統下:占用4個位元組空間。
64位作業系統下:占用8個位元組空間。
int a =10;
//定義指標
int* p;
//給指標賦值
p =&a; cout <<
"sizeof(int *):"
<<
sizeof
(p)<< endl;
//4
空指標:指標變數指向記憶體中編號為0的空間
用途:初始化指標變數
注意:空指標指向的記憶體是不可以訪問的
//空指標
int* p =
null
;//空指標不能訪問,但可以初始化指標變數
//0~255之間的記憶體編號是系統占用,因此不可以訪問
野指標:指標變數指向非法的記憶體空間
//指標變數指向記憶體位址編號為0x1100的空間
int* p =
(int*)
0x1100
;//訪問野指標會報錯
cout <<
*p << endl;
//: 讀取訪問許可權衝突。
總結:空指標和野指標都不是我們申請的空間,因此不能訪問。
有三種情況:
const修飾指標 —常量指標
const修飾常量 —指標常量
const既修飾指標,又修飾常量
int a =10;
int b =20;
修飾指標
//指標指向的值不可以改,指標的指向可以改
const
int* p1 =
&a;//則*p1 = 20;是乙個錯誤
cout << p1 << endl;
//輸出的是位址
cout <<
*p1 << endl;
//輸出的是10
修飾常量
//指標指向的值可以改,指標的指向不可以改
int*
const p2 =
&b;*p2 =
100;
//正確
p2 =
&a;//錯誤
既修飾指標又修飾常量
const
int*
const p3 =
&a;//指標的指向和指向值都不可以改
作用:利用指標訪問陣列元素
int arr=
; cout <<
"陣列的第乙個元素:"
<< arr[0]
<< endl;
int* p = arr;
//arr就是陣列的首位址
cout <<
"利用指標訪問第乙個元素:"
<<
*p << endl;
cout <<
"利用指標訪問第二個元素:"
<<
*(p +1)
<< endl;
作用:利用指標做函式引數,可以修改實參的值
#
include
using
namespace std;
//值傳遞
void
swap1
(int a,
int b)
//位址傳遞
void
swap2
(int
* p1,
int* p2)
intmain()
C語言學習筆記之函式指標與函式指標陣列
指標函式 本質是乙個函式 是乙個返回指標型別的函式 int sum 函式指標 本質是乙個指標 是乙個指向函式的指標 int p int,int sum p 5,6 int sum int a,int b 指標陣列 陣列內儲存的都是指標 int p 2 int a 20 int arr 5 int p...
C 學習筆記 函式指標
1 c 指標函式基礎 函式是有位址的,它表示函式執行的入口。我們知道位址值並沒有用,但是可以將位址值當做實參傳入到其它函式中,這可以在不同的時期呼叫不同的函式。函式指標包括三點 如何獲取函式位址,如何申明函式指標,如何呼叫函式。簡單示例 include double betsy int double...
C 學習筆記 函式指標與指標函式
函式指標 指向函式的指標,首先它是指標變數 同指向乙個整形變數 字元 陣列一樣 其次它指向乙個函式 位址 宣告 函式型別 指標變數名 形參列表 函式型別,指明函式的返回型別,由於 優先順序高於 所以指標變數名外的括號不能少,後面形參列表表示指標變數指向的函式所帶的引數列表。上面相當於用函式指標p,代...