什麼是指針
* 指針變量:用來存儲某種數據在內存中的地址.
* 世面上書籍通常把指針和指針變量的概念混在一塊兒了.
市面上的書籍說的指針指的就是指針變量java
Ø *號的三種含義
1. 兩個數相乘
int i =5;
int j = 5;
i*j;
2. 基本類型* 表示這種類型的指針變量
- 指向內存中這種類型的變量的地址
int i= 3;
int* p;能夠存放i的地址
p=&i
3. 指針變量前加* 表取出這個指針變量裏的數據
int* p;
*p 把地址裏的數據取出來數據結構
指針常見錯誤
* 野指針:指針變量沒有定義指向的地址,該指針就不能賦值(點我就藍屏)
int* p;//聲明一個指針變量用來存放一個地址
//指針變量未經賦值,不能夠使用.
//*p 野指針.
printf("*p=%d\n",*p);
* 每種數據類型的地址,必須用當前類型的指針變量表示
double d = 3.14;
int *p ;//指針變量存儲int類型數據的地址
//每種數據類型的地址,必須用當前數據類型的指針變量表示.
p = &d;
printf("*p=%lf\n",*p); 函數
Ø 值傳遞和引用傳遞
* 引用傳遞:若是傳遞的值是一個內存地址,經過這個地址能夠找到地址對應的引用
* 值傳遞:傳遞具體的數值
* 在java語言中對象實際上存放在某個內存地址裏面,傳遞對象就至關於傳遞的是內存地址(引用傳遞)spa
Ø 指針的應用場景
讓函數返回一個以上的值
直接訪問硬件 (opengl 顯卡繪圖)
快速傳遞數據(指針表示地址)
表示複雜的數據結構(結構體)
方便處理字符串
指針有助於理解面向對象指針
• 指針就是地址,地址就是指針對象
• 地址就是內存單元的編號blog
• 指針變量是存放地址的變量內存
• 指針和指針變量是兩個不一樣的概念字符串
• 可是要注意: 一般咱們敘述時會把指針變量簡稱爲指針,實際它們含義並不同io
#include<stdio.h> #include<stdlib.h> main() { int i = 5; //寫一個一級指針 int* p = &i; printf("p = %d \n",*p); //二級指針 int** pi = &p; printf("pi =%d \n",*(*pi)); printf("pi =%d \n",**pi); //三級指針 int*** pp = & pi; printf("pp = %d \n",***pp); }