昨日回顧
if...else
數(shù)組:不允許越界訪問。
練習:
1.在數(shù)組中插入一個數(shù)據(jù)。
2.尋找素數(shù)并保存到數(shù)組中。
3.將數(shù)組倒置。
===================
一、數(shù)組
(1)二維數(shù)組
** 行數(shù)可以省略,列數(shù)不可省。**
二、指針
(1)指針類型是一種特殊類型
Datatype *name; //一般使用形式。
Datatype* name; //底層代碼使用較多。
Datatype * name;
*:表示這是一個指針變量。
name: 指針變量名。
指針和普通變量的區(qū)別:
指針 :存地址。
普通變量:存值。
指針只能保存與其相同類型的地址。
int *p:只能保存int型地址。
char *pc:只能保存char型地址。
double *pd:只能保存double型地址。
(2)初始化
例:
int *p= Null; //OK
int a=3;
int *pa= &a; //OK
int *pb;
pb= &a; //OK
int *pc;
*pc= &a; //不允許!!
(3)地址的訪問
*:間接訪問運算符。
如:
int a = 10;
int *pb;
pb = &a; //OK
例:
變量名 變量地址 值
a 0x000012 10
pb 0x000089 0x000012
*pb:取指針對應內(nèi)存里的值。
(4)可把指針變量賦值給同類型指針。
(5)不同類型的指針大小
32位機下指針大小為4。
64位機下指針大小為8。
(6)指針的類型和指針所指向的類型
例:
int *pa;
int* pa;
double *pb;
指針的類型:去掉變量名之后的部分,int。
指針所指向的類型:去掉指針變量名和其前面的,int。
(7)指針與數(shù)組
數(shù)組名是個地址。
數(shù)組元素的訪問:
int arr[5] = {0,1,2,3,4};
int *p =arr;
例:
arr[0]; arr[3];
*(arr); *(arr+3);
*(p); *(p+3); //數(shù)組名也可以理解為一個指針
p[0]; p[3];
(8)野指針
未初始化,或其指向的內(nèi)存被釋放,而指針沒有被置空;
危害:造成系統(tǒng)資源的浪費,容易造成未知的致命錯誤。
常見,段錯誤
(9)指針地址的運算
指針的自增和自減
自增:向指針的高地址方向移動。
自減:向指針的低地址方向移動。
指針可互減,負號代表方向,表示兩指針之間的距離,低地址與高地址間的字節(jié)的距離。
指針相加沒有意義。
常量值×sizeof(對應數(shù)據(jù)類型)個字節(jié)!
(10)概念區(qū)分
例:
int buf[3]; //數(shù)組,大小為3,存放三個int型變量。
int *pa; //指針,其類型為int *型。
int *arr[3]; //指針數(shù)組;優(yōu)先級看arr先和[]結(jié)合。數(shù)組里存著3個指針或地址。
int *(pa)[3]; //數(shù)組指針,又稱行指針;指針里存數(shù)組的地址。
int (*)[3] pa; //上式的另一種形式,更好理解,數(shù)據(jù)類型定義一個變量。
又例:
int arr[3][3] = {{11,12,13},{21,22,23}.{31,32,33}};
<===> arr[3] = {arr[3](1),arr[3](2),arr[3](3)}
矩陣為
11 12 13
21 22 23
31 32 33
三、二級指針
格式
Datatype **PointorName;
例:
int a = 10;
int *q = &a;
int **p = &q;
注:
*p = q;
**p = *q = a;
定義一個指針,或?qū)Φ刂愤M行操作時,一定要確定指針的指向。
排版耗時25分鐘。
疑問上課已提出,并解決。