日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

C语言学习之指针

發布時間:2025/3/20 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言学习之指针 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

指針學習筆記

指針是一個特殊的變量,它里面存儲的數值被解釋成內存里的一個地址

從下方面四個方面入手(索要資料:974488891):

1.????? 指針的類型

2.????? 指針所指向的類型

3.????? 指針的值的值或者叫指針所指向的內存區

4.????? 指針本身所占據的內存區

Example:

int *ptr;

char *ptr;

int **ptr;

int (*ptr)[3];

int *(*ptr)[4]

?

一.指針類型

int *ptr;? ??//其類型是int *;

?????????? ?char *ptr; ???//指針類型char *

????????? ??int **ptr; ???//指針類型int **,二級指針

????????? ??int(*ptr)[3];? ?//指針類型時int (*)[3]

????????? ??int*(*ptr)[4];? //指針類型int *(*)[4]

二.指針所指向的類型

當我們通過指針來訪問指針所指向的內存區時,指針所指向的類型決定了編譯器將吧計算器那塊區域里的內容當做什么來看待,從語法上來看,只需把指針聲明語句中的指針名字和名字左邊的指針聲明符號*去掉,剩下的就是指針所指向的類型.

?

int *ptr;???? //指針所指向的類型為int

char *ptr;??? //指向的類型為char

int **ptr;??? //指針指向的類型時int*,二級指針

int (*ptr)[3];? //指針指向的類型是int ()[3]

int *(*ptr)[4]; //指針指向的類型是int *()[4]

?

1.指針類型剖析:

int p;????????? //普通的整型變量

int *p;???????? //普通的整形指針變量

int p[3];??????? //普通的p先結合數組再結合int型,整形數據類型數組

int *p[3];?????? //p先結合[],優先級[]高于*,所以p是一個數組,再與*結合,所以數組里面的數據類型是指針類型,返回整型數據的指針所組成的數組

int (*)p[5];???? //從變量名開始先結合*,再結合[],故指針所指向的內容是一個數組,然后和int 結合,數組里面元素是整形的,所以p是一個指?? 向整形數據 組 成的數組的指針

int ?**p;???????//指針指向的元素是指針,二級指針

int ?p(int);??????//p是一個函數

int? (*p)(int);????//首先p是一個指針,再與(int)結合,所以P是一個指向有一個整形參數且返回類型為整形的函數的指針

int? *(*p(int))[5];? //從p開始,線與()結合,所以p是一個函數,(*p(int))函數返回的是一個指針,再結合[5],說明返回的指針是指向的一個數組,再與*結合,數組元素是指針;

2.指針類型轉換

? 當初始化一個指針或指針賦值時候,賦值號左右兩邊類型不一致的情況下,此時需要進行強制類型轉化

??? 語法:(TYPE*)P;

?

?

三.指針數組和數組指針

指針數組:用于存儲指針的數組,也就是數組元素都是指針。

數組指針:指向數組的指針。

?

int? *a[10];??????//指針數組,首先a是一個數組,包含10個元素,每個元素都是指針,表示數組a中的元素都為int型指針。

元素表示:*a[i] *(a[i])是一樣的,注意優先級的問題

?

int (*a)[10];??????? //數組指針,表示指向數組a的指針,但是其元素表示(*a)[i],在實際應用對于指針數組,都會經常這樣使用。

Typedef int * pInt; //自定義數據類型,

pInt a[10];?????????

?

四.函數指針和指針函數

函數指針:首先是一個指針,只是這個指針指向的是一個函數

指針變量可以指向變量的地址、數組、字符串、動態分配地址,同時也可以指向一個函數,每個函數在編譯的時候,系統會分配給該函數一個入口地址,函數名表示這個入口,那么指向指針變量稱為函數指針變量

聲明格式:

類型說明符 (*函數名)(參數),準確的說這里不能叫函數名,應該叫做指針變量

Void (*fptr)();

賦值:fptr = &function;取地址運算符不是必須的,因為函數名就表示地址

fptr = function;

如果是函數調用,就必須包括()

兩種方式通過指針調用函數

X =(*fptr)();

X = fptr();

?

?

指針函數:首先是一個函數,只不過這個函數的返回值是一個地址的值,但函數返回值必須使用同類型的指針變量來接受,也就是說,指針函數一定有函數返回值,而且在主調函數中,函數返回值必須給同類型的指針變量。

?

聲明格式: *函數名(參數)

?

?

Float *fun();

Float? *p;

?P = fun(a);

?

?

// PSProject.cpp : 定義控制臺應用程序的入口點。 //#include "stdafx.h" #include <iostream> #include <stdlib.h> #include <stdio.h>using namespace std;void (*funcp)();//函數指針 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]; //指針數組,相當于四個指針a[0],a[1],a[2],a[3]int (*b)[4]; //數組指針,可以指向數組的指針b = &arr; //將數組arr的地址賦給b這個數組指針for (int i = 0;i < 4;i++){a[i] = &arr[i];}cout<<"result1 = "<<*a[1]<<endl;cout <<"result2 = "<<(*b)[2]<<endl;//區分函數指針和指針函數cout <<"函數指針"<<endl;funcp = FileFunc;//只是把函數地址賦給func這個指針(*funcp)(); //這樣才能輸出funcp = EditFunc;(*funcp)(); //這樣才能輸出//指針函數int wk,dy;do {printf("請輸入周(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]; }

?

?

?

?

?

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。