指針定義
指針:一個變量,其值為另一個變量的地址,即,內(nèi)存位置的直接地址
指針
指針定義格式
在使用指針存儲其他變量地址之前,對其進行聲明。指針變量聲明的一般形式為:
type *var-name;
- type就是指針類型
- var-name就是指針名字。
- *的作用:
- 聲明或者定義變量的時候 表示一個指針變量
float b =20;
int c = 10;
int *a; //定義一個指針變量 指向的內(nèi)存空間只能存放整數(shù)
/* 注意:定義一個指針變量一定要給初值 */
int *a = b;(int *a = 20)//這種做法錯誤,指針只能存放地址 不能存具體值
int *a = &b;//這種做法也是錯誤的,整形指針只能存放整形數(shù)據(jù)的地址
int a = &c;
float *d = NULL;//NULL指向內(nèi)存的起始地址 0x00
- 除了定義指針變量之外,都是訪問某個地址的值
int *temp =&c;
*temp = 21;//訪問temp地址里面的地址,并賦值21
指針變量在內(nèi)存空間里占據(jù)8位(64位系統(tǒng))
指針的類型
in t*p1;//整數(shù)型指針 指針指向的類型為整數(shù)
char *p2;//字符型指針 指針指向的類型為字符
float *fp; //浮點型的指針 指針指向的類型為浮點數(shù)
指針與數(shù)組
數(shù)組名并不是一個變量,沒有分配內(nèi)存空間
指針變量是有內(nèi)存空間
int a[10];
int *b = &a;
printf("%p \n", &a);
printf("%p \n", &a[0]);
printf("%p \n", b);
輸出結(jié)果:輸出結(jié)果
- 定義一個數(shù)組 系統(tǒng)會分配內(nèi)存空間 可以存值。
int num[113];
- 定義一個指針變量 只為變量本身分配8個字節(jié)的內(nèi)存空間;但是無法存值 因為沒有為他分配可以存值的內(nèi)存空間。
給指針指向的區(qū)域賦值:
指針變量已經(jīng)指向某個區(qū)域
指針指向一個數(shù)組或者指向內(nèi)存為其他變量
動態(tài)分配內(nèi)存:獲取屬于指針自身的的內(nèi)存空間
普通變量的內(nèi)存是系統(tǒng)自己分配 所以系統(tǒng)復(fù)雜釋放。
動態(tài)分配內(nèi)存
- 分配方法:malloc realloc
//定義一個整形指針
int *p;
//為p分配4個整形字符的內(nèi)存
p =(int *) malloc(4 * sizeof(int));
//重新為p分配2個整形字符內(nèi)存
realloc(&p, (2 * sizeof(int)));
- 分配內(nèi)存之后需要判斷分配是否成功
- 當(dāng)之前分配的內(nèi)存空間不夠了 就需要在之前的基礎(chǔ)之上重新分配r(ealoc)
(注意:realloc 必須是之前使用malloc分配過的) - 用完了就要自己釋放內(nèi)存