C語言基礎(chǔ)
指針初講
- 指針變量:就是一種用來存儲(chǔ)地址的變量芒划。
- 表示方法:int *p;這里的 * 是用來代表p存儲(chǔ)的是地址拼苍。int代表將來存儲(chǔ)的是什么類型的變量的地址俊犯。
int *p=&a;
int *p;
p=&a;
int a;
int *p=&a;
*p=7;
printf("%d",a);//a=7;
**(*(&a)=7,*是指取p所指向的那個(gè)變量地址所對(duì)應(yīng)的值烂瘫。)**
int *q=&a;
*q=9;
printf("%d",a);//a=9;
指針變量自身也有一個(gè)地址
指向指針的指針
-
數(shù)組與指針的關(guān)系
- 數(shù)組的首地址就
- 訪問一維數(shù)組第i個(gè)元素的地址
- 數(shù)組名就是首元素的地址
a<===>&a[0] a+i<===>&a[i] int *p=&a[0] p=&a[0]=a p+i=&a[i] *(p+i)=a[i]=p[i]
int arr[5] int *p=arr 數(shù)組名就相當(dāng)于首元素的地址 1.第i個(gè)元素地址訪問方法 p+i<===>&p[i]<===>arr+i<===>&arr[i] 2.第i個(gè)元素?cái)?shù)值訪問方法 *(p+i)<===>p[i]<===>*(arr+i)<===>arr[i]
- arr 實(shí)際上int const - *arr;表明arr永遠(yuǎn)指向第一個(gè)元素贷祈,不能更改趋急,就是說arr++非法
- p++合法
-
const變量:
- 代表這個(gè)變量屬性只讀不可寫(不可改變)。
- const變量只能在定義的時(shí)候進(jìn)行初始化
兩種定義方式: const int a; int const a;
- const使用:
int a=9势誊; const int *p=&a呜达; int const *p=&a; *p=3粟耻;//會(huì)報(bào)錯(cuò)
- 如果const是寫在*的左邊查近,代表這個(gè)變量將來如果用p訪問的時(shí)候,內(nèi)容只讀挤忙。
int a=9霜威; int b=2; int *const p=&a册烈; p=&b;//會(huì)報(bào)錯(cuò)
- 如果*寫在const右邊戈泼,代表這個(gè)指針變量的本身內(nèi)容只讀,不可更改
const int *const p=&a赏僧; int a=9大猛; int b=2; p=&b;*p=3;//都會(huì)報(bào)錯(cuò)
- 如果*左右都有次哈,代表const指向的內(nèi)容只讀胎署,p本身的內(nèi)容只讀。
-
指針數(shù)組
- 先算[],說明他是個(gè)數(shù)組窑滞,再算*,代表這個(gè)數(shù)組所有的元素都是指針琼牧。
int a,b,c; int *p[3]={&a,&b,&c}; *(p[0])=7; printf("a=%d\n",a);//a=7;
多個(gè)指針變量同時(shí)賦值
int *p, *q;
- 指針?biāo)甲止?jié)數(shù)
- int *,char *,在32位機(jī)占4個(gè)字節(jié),在64位機(jī)占8個(gè)字節(jié)哀卫。
printf("int *占%ld個(gè)字節(jié)\n",sizeof(int *)); printf("char *占%ld個(gè)字節(jié)\n",sizeof(char *));
- 定義一個(gè)指針必須要給其初值
int *p; *p=4;//會(huì)報(bào)錯(cuò)巨坊。 int *p=NULL; *P=4;//就可以了。
- 運(yùn)算優(yōu)先級(jí)
- ()>單目>算數(shù)>關(guān)系>邏輯>三目>賦值>,
- 單目>雙目>三目
int a=(3,5); printf("a=%d\n");//,是從左往右算此改,結(jié)果為5.
//練習(xí):定義一個(gè)整型數(shù)組趾撵,使用指針去對(duì)數(shù)組進(jìn)行排序
//練習(xí):
int arr[5]={1,2,3,4,5};
請(qǐng)你將數(shù)組元素顛倒輸出,變成{5共啃,4占调,3,2移剪,1}究珊,不準(zhǔn)使用第二個(gè)數(shù)組。
//練習(xí):使用指針交換兩個(gè)變量的值