指針(1)

今天做筆試題的時候~又被指針給虐了一遍,想想之前對指針似懂非懂,然而並沒有動手去敲過,總感覺自己懂了~?導致這幾次被虐的很慘很慘~今天重拾歸納一下:
*首先我們得知道指針是用來控制對象的內存地址
1、筆試題中,會經常碰到這樣的題目:向你10歲大的侄子解釋一下什麼是指針?
指針就是用來存儲內存地址的變量,它指向單個對象的地址。
PS:C++裏面提供了void * 類型的指針類型,萬能指針,可以保存任何類型對象的地址。
2、在初始化的時候要注意,指針保存的是變量的地址地址地址,還有也可以初始化爲0(C語言爲NULL),表示不指向任何實體。未初始化的指針很危險,它的指向是隨機的,可能導致隨機修改程序的值,應避免使用。舉個栗子:
int *p;
int number=10;
p=&number;//保存的是number變量的地址
int *q=0;//初始化爲0
指針賦值需要注意變量的數據類型需要和指針的數據類型兼容。
//沒達到目的的賦值
long tt=1234;
long *p;
p=&tt;
//達到目的,但是可能導致程序修改未知區域的內存
long tt=1234;
long *p;
p=123;
3、指針操作數組
一維數組的指針操作還相對簡單;可怕的是多維數組。
一維數組指針表示:
int a[]={1,2,3,4,5,6};
int *p=a;//指向第一個元素a[0]的地址。
int *p1=&a[1];
int *p2=&a[2];
int *p5=&a[4];
int diff=p5-p2=2;
多維:
(1)double b[5][5];
double pb=*b[0][0];//把指針設爲數組的第一個元素
double *pb=b[0];//把指針設爲數組第一行的地址。
(2)再寫一個今天做的筆試題
int a[][]={{1,2},{3,4}};
*(a+1);
**(a+1);
*(*(a)+1);
下面是執行結果,自己體會吧:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章