C语言学习之指针
指針學(xué)習(xí)筆記
指針是一個(gè)特殊的變量,它里面存儲(chǔ)的數(shù)值被解釋成內(nèi)存里的一個(gè)地址
從下方面四個(gè)方面入手(索要資料:974488891):
1.????? 指針的類型
2.????? 指針?biāo)赶虻念愋?/p>
3.????? 指針的值的值或者叫指針?biāo)赶虻膬?nèi)存區(qū)
4.????? 指針本身所占據(jù)的內(nèi)存區(qū)
Example:
int *ptr;
char *ptr;
int **ptr;
int (*ptr)[3];
int *(*ptr)[4]
?
一.指針類型
int *ptr;? ??//其類型是int *;
?????????? ?char *ptr; ???//指針類型char *
????????? ??int **ptr; ???//指針類型int **,二級(jí)指針
????????? ??int(*ptr)[3];? ?//指針類型時(shí)int (*)[3]
????????? ??int*(*ptr)[4];? //指針類型int *(*)[4]
二.指針?biāo)赶虻念愋?/h2>
當(dāng)我們通過指針來訪問指針?biāo)赶虻膬?nèi)存區(qū)時(shí),指針?biāo)赶虻念愋蜎Q定了編譯器將吧計(jì)算器那塊區(qū)域里的內(nèi)容當(dāng)做什么來看待,從語法上來看,只需把指針聲明語句中的指針名字和名字左邊的指針聲明符號(hào)*去掉,剩下的就是指針?biāo)赶虻念愋?
?
int *ptr;???? //指針?biāo)赶虻念愋蜑閕nt
char *ptr;??? //指向的類型為char
int **ptr;??? //指針指向的類型時(shí)int*,二級(jí)指針
int (*ptr)[3];? //指針指向的類型是int ()[3]
int *(*ptr)[4]; //指針指向的類型是int *()[4]
?
1.指針類型剖析:
int p;????????? //普通的整型變量
int *p;???????? //普通的整形指針變量
int p[3];??????? //普通的p先結(jié)合數(shù)組再結(jié)合int型,整形數(shù)據(jù)類型數(shù)組
int *p[3];?????? //p先結(jié)合[],優(yōu)先級(jí)[]高于*,所以p是一個(gè)數(shù)組,再與*結(jié)合,所以數(shù)組里面的數(shù)據(jù)類型是指針類型,返回整型數(shù)據(jù)的指針?biāo)M成的數(shù)組
int (*)p[5];???? //從變量名開始先結(jié)合*,再結(jié)合[],故指針?biāo)赶虻膬?nèi)容是一個(gè)數(shù)組,然后和int 結(jié)合,數(shù)組里面元素是整形的,所以p是一個(gè)指?? 向整形數(shù)據(jù) 組 成的數(shù)組的指針
int ?**p;???????//指針指向的元素是指針,二級(jí)指針
int ?p(int);??????//p是一個(gè)函數(shù)
int? (*p)(int);????//首先p是一個(gè)指針,再與(int)結(jié)合,所以P是一個(gè)指向有一個(gè)整形參數(shù)且返回類型為整形的函數(shù)的指針
int? *(*p(int))[5];? //從p開始,線與()結(jié)合,所以p是一個(gè)函數(shù),(*p(int))函數(shù)返回的是一個(gè)指針,再結(jié)合[5],說明返回的指針是指向的一個(gè)數(shù)組,再與*結(jié)合,數(shù)組元素是指針;
2.指針類型轉(zhuǎn)換
? 當(dāng)初始化一個(gè)指針或指針賦值時(shí)候,賦值號(hào)左右兩邊類型不一致的情況下,此時(shí)需要進(jìn)行強(qiáng)制類型轉(zhuǎn)化
??? 語法:(TYPE*)P;
?
?
三.指針數(shù)組和數(shù)組指針
指針數(shù)組:用于存儲(chǔ)指針的數(shù)組,也就是數(shù)組元素都是指針。
數(shù)組指針:指向數(shù)組的指針。
?
int? *a[10];??????//指針數(shù)組,首先a是一個(gè)數(shù)組,包含10個(gè)元素,每個(gè)元素都是指針,表示數(shù)組a中的元素都為int型指針。
元素表示:*a[i] *(a[i])是一樣的,注意優(yōu)先級(jí)的問題
?
int (*a)[10];??????? //數(shù)組指針,表示指向數(shù)組a的指針,但是其元素表示(*a)[i],在實(shí)際應(yīng)用對(duì)于指針數(shù)組,都會(huì)經(jīng)常這樣使用。
Typedef int * pInt; //自定義數(shù)據(jù)類型,
pInt a[10];?????????
?
四.函數(shù)指針和指針函數(shù)
函數(shù)指針:首先是一個(gè)指針,只是這個(gè)指針指向的是一個(gè)函數(shù)
指針變量可以指向變量的地址、數(shù)組、字符串、動(dòng)態(tài)分配地址,同時(shí)也可以指向一個(gè)函數(shù),每個(gè)函數(shù)在編譯的時(shí)候,系統(tǒng)會(huì)分配給該函數(shù)一個(gè)入口地址,函數(shù)名表示這個(gè)入口,那么指向指針變量稱為函數(shù)指針變量
聲明格式:
類型說明符 (*函數(shù)名)(參數(shù)),準(zhǔn)確的說這里不能叫函數(shù)名,應(yīng)該叫做指針變量
Void (*fptr)();
賦值:fptr = &function;取地址運(yùn)算符不是必須的,因?yàn)楹瘮?shù)名就表示地址
fptr = function;
如果是函數(shù)調(diào)用,就必須包括()
兩種方式通過指針調(diào)用函數(shù)
X =(*fptr)();
X = fptr();
?
?
指針函數(shù):首先是一個(gè)函數(shù),只不過這個(gè)函數(shù)的返回值是一個(gè)地址的值,但函數(shù)返回值必須使用同類型的指針變量來接受,也就是說,指針函數(shù)一定有函數(shù)返回值,而且在主調(diào)函數(shù)中,函數(shù)返回值必須給同類型的指針變量。
?
聲明格式: *函數(shù)名(參數(shù))
?
?
Float *fun();
Float? *p;
?P = fun(a);
?
?
// PSProject.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。 //#include "stdafx.h" #include <iostream> #include <stdlib.h> #include <stdio.h>using namespace std;void (*funcp)();//函數(shù)指針 void FileFunc(),EditFunc();int *GetData(int week,int day);int _tmain(int argc, _TCHAR* argv[]) {int arr[4] = {10,20,30,40};int *a[4]; //指針數(shù)組,相當(dāng)于四個(gè)指針a[0],a[1],a[2],a[3]int (*b)[4]; //數(shù)組指針,可以指向數(shù)組的指針b = &arr; //將數(shù)組arr的地址賦給b這個(gè)數(shù)組指針for (int i = 0;i < 4;i++){a[i] = &arr[i];}cout<<"result1 = "<<*a[1]<<endl;cout <<"result2 = "<<(*b)[2]<<endl;//區(qū)分函數(shù)指針和指針函數(shù)cout <<"函數(shù)指針"<<endl;funcp = FileFunc;//只是把函數(shù)地址賦給func這個(gè)指針(*funcp)(); //這樣才能輸出funcp = EditFunc;(*funcp)(); //這樣才能輸出//指針函數(shù)int wk,dy;do {printf("請(qǐng)輸入周(1-5)天(1-7):\n");scanf("%d,%d",&wk,&dy);} while (wk < 1 ||wk > 5|| dy <1 || dy >7);printf("%d\n",*GetData(wk,dy));system("pause");return 0; }void FileFunc() {printf("FileFunc\n"); } void EditFunc() {printf("EditFunc\n"); }int *GetData(int week,int day) {static int calendar[5][7]={{1,2,3,4,5,6,7},{8,9,10,11,12,13,14},{15,16,17,18,19,20,21},{22,23,24,25,26,27,28},{29,30,31,-1}};return &calendar[week-1][day-1]; }?
?
?
?
?
總結(jié)
- 上一篇: 相位解包裹
- 下一篇: 关于word中公式和图片对齐的简易设置