C++课程上 有关“指针” 的小结
生活随笔
收集整理的這篇文章主要介紹了
C++课程上 有关“指针” 的小结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
上完了C++的第二節課以后,覺得應該對這個內容進行一個小結,鞏固知識點,并對我的心情進行了一個側面烘托...
開始上課的老師:
正在上課的我:
上去敲代碼的我:
過程是這樣的:
下來的我:
非常的尷尬,簡直是黑歷史= =
變量:
變量有整形變量,浮點型變量,字符型變量,當然還有指針變量。對于32位操作系統而言,為字符型變量分配的內存單元是一個字節,整型是兩個字節,單精度浮點型變量為四個,雙精度浮點型變量為八個字節,今天要闡述的指針變量是四個字節。
指針變量所存儲的是地址。
int a; int *pa; pa = &a; //將整形變量a的地址賦值給整型指針pa經過上面代碼的處理以后,指針pa指向變量a。
指針變量的定義:
int *ptr1; float *ptr2; char *ptr3; void *ptr;指針變量的賦值:
int *ptr,a = 4; ptr = &a; //將變量a的地址賦值給指針變量ptr經過上面語句的處理以后,整形指針指向整形變量a。原來以為整形指針和整形變量放在一起定義編譯會出錯,學習了:int *ptr,a=4;
指針變量的引用:
(1)
int main() {int *p,m;scanf("%d",&m);p = &m; //指針p指向mprintf("%d\n",*p);return 0; }這段程序比較簡單,沒有什么問題。
(2)
int main() {int *p,m;p = &m;scanf("%d",p);printf("%d\n",m);return 0; }我:“???”
回來以后自己試了下,弄懂了這個內容,就是把之前輸入的scanf中的&m替換為p。這里摘取一段C++中文網介紹scanf的說明。
(3)
int main() {int *p,m;scanf("%d",p);p = &m;printf("%d\n",m);return 0; }“這不行吧???”
確實是不行的,程序崩潰。原因是因為其不安全性。
指針:
指針是一種特殊的變量,它存儲的數值是內存中的一個地址。 1.指針的類型 2.指針所指向的類型 3.指針的值 或者 指針所指向的內存區 4.指針本身所占據的內存區指針的類型和指針所指向的類型:
1.指針聲明語句里的指針名字去掉,剩下的部分就是這個指針的類型。 2.只需把指針聲明語句里的指針名字和名字左邊的指針聲明符*去掉,剩下的部分就是這個指針所指向的類型。 int *ptr; //整形 指針 char *ptr; //字符型 指針 int* *ptr; //整形指針 的 指針 int (*ptr)[3]; //指向含三個整形元素的整形數組 的 指針 int* (*ptr)[4]; //指向含四個整形指針的指針數組(array of pointers) 的 指針這里注意“數組 指針”(a pointer to an array)和“指針 數組”(array of pointers)的區別,參考資料:指針數組和數組指針的區別
void 指針
int main() {int m = 5;void *ptr;ptr = &m;printf("%d\n",*ptr);return 0; }編譯錯誤。
“void型指針,表示這個指針指向的內存中的數據的類型要由用戶來指定。 比如內存分配函數malloc函數返回的指針就是void *型,用戶在使用這個指針的時候,要進行強制類型轉換,也就是顯式說明該指針指向的內存中是存放的什么類型的數據 (int *)malloc(1024)表示強制規定malloc返回的void*指針指向的內存中存放的是一個個的int型數據?!?指針的值:指針所指向的內存區。
指針本身所占據的內存區:
可以使用sizeof(指針類型),對于32位操作系統來說,系統為指針變量分配4個字節的長度。
char *np;1. sizeof(char) // 1 2. sizeof(*np) //4 3. sizeof(char *) //4 4. sizeof(char *p) //compiling error總結
以上是生活随笔為你收集整理的C++课程上 有关“指针” 的小结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JBPM工作流入门总结
- 下一篇: python--批量下载豆瓣图片