日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言学习之指针

發(fā)布時(shí)間:2025/3/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言学习之指针 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

指針學(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é)

以上是生活随笔為你收集整理的C语言学习之指针的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。