1.內(nèi)存四區(qū):
堆區(qū):系統(tǒng)自動開辟鸵荠,自動釋放
堆區(qū):程序員主動開辟主動釋放
全局區(qū):全局靜態(tài)變量
代碼區(qū):保存代碼
2.地址
地址的具體含義為辰企,例如小明住在21棟5樓東戶那么小明,這個地址為一個地址殿如,而這個地址 里東西為值地址有以下特性柴墩,唯一君仆,地址也是一種數(shù)據(jù)翩概。
首地址:為一個存儲序列的第一個地址
3.指針變量:
#include <stdio.h>
main()
{
int a = 111;
int *p =&a;
printf("a的值%d\n",a);
printf("a的地址的值%d\n",&a);
printf("指針變量pa的值%d\n",p);
printf("pa指向的值%d\n",*p);
}
作用:存儲地址。
定義一個指針: int p=NULL; //其中q是一個變量返咱,不要把p看做一個整體钥庇;其實(shí)p就是一個int* 的變量,可以這樣看 數(shù)據(jù)類型變量名咖摹,星號只能說明這里是一個指針變量评姨。
野指針:定義一個指針沒有指向任何的地址,在指針進(jìn)行初始化時(shí)一定要賦值。
4.指針的引用:
指針變量自己的值:p萤晴;
指針變量指向的值:pa
5.空指針:不確定類型的指針 void *
malloc(4)//開辟四個字節(jié)那么這個四個字節(jié)存放什么的吐句?可以使 int unsigned int floa t型
void可與強(qiáng)制轉(zhuǎn)換為其他任意的類型
(int*)malloc(4)
(float*)malloc(4)
(char(*)[4]) malloc(4)
如果給一個房子需要放東西,那么怎么把東西放到進(jìn)去店读,按四個字節(jié) 還是一個字節(jié)放嗦枢,申請四個字節(jié)不一定是把這個內(nèi)存占滿,大的可以裝小的小的不可以裝大的
6.指針的運(yùn)算
指針的運(yùn)算其實(shí)就是地址的偏移屯断,兩個地址之間的運(yùn)算是沒有任何意義的
就有這些運(yùn)算 ++ -- + - 這幾種格式
#include <stdio.h>
main()
{
char a ;
char *pa = &a;
int b;
int *pb=&b;
int c[10];
int(*pc)[10] = &c;
printf("pa=%d\tpa+1=%d\n",pa,pa+1);
printf("pb=%d\tpb+1=%d\n",pb,pb+1);
printf("pc=%d\tpc+1=%d\n",pc,pc+1);
}
pa=1637199 pa+1=1637200
pb=1637172 pb+1=1637176
pc=1637112 pc+1=1637152
請按任意鍵繼續(xù). . .
7.一維數(shù)組與指針
&a是指向整個數(shù)組的指針
a是數(shù)組名:[數(shù)組名是這個數(shù)組的首地址]
int p1=a;
int(pa)[5] = &a;//數(shù)組指針
a指向數(shù)組的第一個存儲單元 a[0]
訪問數(shù)組元素
數(shù)組名:
*(a+m) //a[m]
8.二維數(shù)組與指針
arr[m][n] = (*(arr+m)+n)