国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

長(zhǎng)春電商網(wǎng)站建設(shè)哪家好seo如何挖掘關(guān)鍵詞

長(zhǎng)春電商網(wǎng)站建設(shè)哪家好,seo如何挖掘關(guān)鍵詞,java 政府網(wǎng)站開發(fā),做企業(yè)網(wǎng)站的公司有哪些指針進(jìn)階 5.函數(shù)指針6. 函數(shù)指針數(shù)組7. 指向函數(shù)指針數(shù)組的指針8. 回調(diào)函數(shù)案例:使用回調(diào)函數(shù),模擬實(shí)現(xiàn)qsort(采用冒泡的方式)。案例:測(cè)試qsort排序結(jié)構(gòu)體數(shù)據(jù) 5.函數(shù)指針 補(bǔ): &函數(shù)名就是函數(shù)的地址 …

指針進(jìn)階

    • 5.函數(shù)指針
    • 6. 函數(shù)指針數(shù)組
    • 7. 指向函數(shù)指針數(shù)組的指針
    • 8. 回調(diào)函數(shù)
      • 案例:使用回調(diào)函數(shù),模擬實(shí)現(xiàn)qsort(采用冒泡的方式)。
      • 案例:測(cè)試qsort排序結(jié)構(gòu)體數(shù)據(jù)

5.函數(shù)指針

補(bǔ):
&函數(shù)名就是函數(shù)的地址
函數(shù)名也是函數(shù)的地址

代碼演示:
#include<stdio.h>
int Add(int x, int y)
{return x + y;
}
int main()
{//&函數(shù)名就是函數(shù)的地址//函數(shù)名也是函數(shù)的地址printf("%p\n", &Add);printf("%p\n", Add);
}

運(yùn)行結(jié)果:
在這里插入圖片描述

#include<stdio.h>
int Add(int x, int y)
{return x + y;
}
int main()
{//函數(shù)指針變量:int (*pf1)(int, int) = Add;//pf1就是函數(shù)指針變量//形式1:int (* pf2)(int, int) = &Add;int ret = (* pf2)(2, 3);//形式2:int (* pf2)(int, int) = Add;int ret = pf2(2, 3);//形式3int (* pf2)(int, int) = Add;int ret = Add(2, 3);printf("%d\n", ret);return 0;
}

來(lái)看以下兩個(gè)代碼:

//代碼1
(* (void (*)( )) 0 )( );
//代碼2
void (* signal (int , void(*)(int)) )(int);

分析:
//代碼一:
將0強(qiáng)制類型轉(zhuǎn)化為(void (*)( )),解引用函數(shù)指針類型,出入?yún)?shù)為空
//代碼二:
是一次函數(shù)聲明,聲明的是signal函數(shù)
第一個(gè)是int類型
第二個(gè)是函數(shù)指針類型,該類型是void( * )(int)。該函數(shù)指針指向的函數(shù)參數(shù)是int,返回類型是void
signal函數(shù)的返回類型也是函數(shù)指針類型,該類型是void( * )(int),該函數(shù)指針指向的函數(shù),參數(shù)是int,返回類型是void

代碼2太復(fù)雜,如何簡(jiǎn)化:

typedef void(*pfun_t)(int);
pfun_t signal(int, pfun_t);

6. 函數(shù)指針數(shù)組

數(shù)組是一個(gè)存放相同類型數(shù)據(jù)的存儲(chǔ)空間,那我們已經(jīng)學(xué)習(xí)了指針數(shù)組

//比如:
int *arr[10];
//數(shù)組的每個(gè)元素是int*

在這里插入圖片描述

那要把函數(shù)的地址存到一個(gè)數(shù)組中,那這個(gè)數(shù)組就叫函數(shù)指針數(shù)組,那函數(shù)指針的數(shù)組如何定義呢?

int (*parr1[10])();
int *parr2[10]();
int (*)() parr3[10];

答案是:parr1
分析:
parr1 先和 [ ] 結(jié)合,說明 parr1是數(shù)組,數(shù)組的內(nèi)容是什么呢?
是 int (*)( ) 類型的函數(shù)指針。

看如下代碼進(jìn)一步理解函數(shù)指針數(shù)組:

int Add(int x, int y)
{return x + y;
}int Sub(int x, int y)
{return x - y;
}
int main()
{int (*pf1)(int, int) = &Add;int (*pf2)(int, int) = &Sub;//數(shù)組中存放類型相同的多個(gè)元素int (*pfArr[4])(int, int) = { &Add, &Sub };//pfArr 是函數(shù)指針數(shù)組 - 存放函數(shù)指針的數(shù)組return 0;
}

函數(shù)指針數(shù)組的用途:轉(zhuǎn)移表

例子:計(jì)算器

void menu()
{printf("****************************\n");printf("***  1. add      2. sub  ***\n");printf("***  3. mul      4. div  ***\n");printf("***  0. exit             ***\n");printf("****************************\n");
}
int Add(int x, int y)
{return x + y;
}
int Sub(int x, int y)
{return x - y;
}
int Mul(int x, int y)
{return x * y;
}
int Div(int x, int y)
{return x / y;
}
int main()
{int input = 0;int x = 0;int y = 0;int ret = 0;do{menu();printf("請(qǐng)輸入選擇>:");scanf("%d", &input);switch (input){case 1:printf("請(qǐng)輸入兩個(gè)操作數(shù)》");scanf("%d%d", &x, &y);ret = Add(x, y);printf("%d\n", ret);break;case 2:printf("請(qǐng)輸入兩個(gè)操作數(shù)》");scanf("%d%d", &x, &y);ret = Sub(x, y);printf("%d\n", ret);break;case 3:printf("請(qǐng)輸入兩個(gè)操作數(shù)》");scanf("%d%d", &x, &y);ret = Mul(x, y);printf("%d\n", ret);break;case 4:printf("請(qǐng)輸入兩個(gè)操作數(shù)》");scanf("%d%d", &x, &y);ret = Div(x, y);printf("%d\n", ret);break;case 0:printf("退出游戲");default:printf("輸入錯(cuò)誤");}} while (input);return 0;
}

用函數(shù)指針實(shí)現(xiàn)

void menu()
{printf("****************************\n");printf("***  1. add      2. sub  ***\n");printf("***  3. mul      4. div  ***\n");printf("***  0. exit             ***\n");printf("****************************\n");
}
//+ - * / && || & | >> <<int Add(int x, int y)
{return x + y;
}int Sub(int x, int y)
{return x - y;
}int Mul(int x, int y)
{return x * y;
}int Div(int x, int y)
{return x / y;
}int main()
{int input = 0;int x = 0;int y = 0;int ret = 0;do{menu();printf("請(qǐng)選擇:>");scanf("%d", &input);//函數(shù)指針數(shù)組 - 轉(zhuǎn)移表int (*pfArr[])(int, int) = {NULL, Add, Sub, Mul, Div};//                          0     1     2   3    4if (0 == input){printf("退出計(jì)算器\n");}else if (input >= 1 && input <= 4){printf("請(qǐng)輸入2個(gè)操作數(shù):");scanf("%d %d", &x, &y);ret = pfArr[input](x, y);printf("ret = %d\n", ret);}else{printf("選擇錯(cuò)誤,重新選擇!\n");}} while (input);return 0;
}

7. 指向函數(shù)指針數(shù)組的指針

指向函數(shù)指針數(shù)組的指針是一個(gè) 指針
指針指向一個(gè) 數(shù)組 ,數(shù)組的元素都是 函數(shù)指針 ;
如何定義?
在這里插入圖片描述

8. 回調(diào)函數(shù)

回調(diào)函數(shù)就是一個(gè)通過函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用來(lái)調(diào)用其所指向的函數(shù)時(shí),我們就說這是回調(diào)函數(shù)?;卣{(diào)函數(shù)不是由該函數(shù)的實(shí)現(xiàn)方直接調(diào)用,而是在特定的事件或條件發(fā)生時(shí)由另外的一方調(diào)用的,用于對(duì)該事件或條件進(jìn)行響應(yīng)。

//代碼演示:
void menu()
{printf("****************************\n");printf("***  1. add      2. sub  ***\n");printf("***  3. mul      4. div  ***\n");printf("***  0. exit             ***\n");printf("****************************\n");
}
//+ - * / && || & | >> <<int Add(int x, int y)
{return x + y;
}int Sub(int x, int y)
{return x - y;
}int Mul(int x, int y)
{return x * y;
}int Div(int x, int y)
{return x / y;
}void calc(int (*pf)(int,int))
{int x = 0;int y = 0;int ret = 0;printf("請(qǐng)輸入2個(gè)操作數(shù):");scanf("%d %d", &x, &y);ret = pf(x, y);printf("ret = %d\n", ret);
}int main()
{int input = 0;do{menu();printf("請(qǐng)選擇:>");scanf("%d", &input);switch (input){case 1:calc(Add);break;case 2:calc(Sub);break;case 3:calc(Mul);break;case 4:calc(Div);break;case 0:printf("退出計(jì)算器\n");break;default:printf("選擇錯(cuò)誤, 重新選擇\n");break;}} while (input);return 0;
}

看圖片理解下回調(diào)函數(shù):
在這里插入圖片描述

案例:使用回調(diào)函數(shù),模擬實(shí)現(xiàn)qsort(采用冒泡的方式)。

一般冒泡排序:

//代碼演示:
void print_arr(int arr[], int sz)
{int i = 0;for (i = 0; i < sz; i++){printf("%d ", arr[i]);}printf("\n");
}void bubble_sort(int arr[], int sz)
{//趟數(shù)int i = 0;for (i = 0; i < sz - 1; i++){//每一趟冒泡排序的過程int j = 0;for (j = 0; j < sz - 1 - i; j++){if (arr[j] > arr[j + 1]){int tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;}}}
}int main()
{//數(shù)據(jù)int arr[] = { 9,8,7,6,5,4,3,2,1,0 };int sz = sizeof(arr) / sizeof(arr[0]);print_arr(arr, sz);bubble_sort(arr, sz);//冒泡排序print_arr(arr, sz);return 0;
}

運(yùn)行結(jié)果:
在這里插入圖片描述

這種冒泡排序缺陷:
在這里插入圖片描述

qsort(采用冒泡的方式):
在這里插入圖片描述

了解以下qsort()函數(shù):

在這里插入圖片描述

//代碼案例:
#include <stdlib.h>
#include <string.h>
void print_arr(int arr[], int sz)
{int i = 0;for (i = 0; i < sz; i++){printf("%d ", arr[i]);}printf("\n");
}
int cmp_int(const void* e1, const void* e2)
{return *(int*)e1 - *(int*)e2;
}
//測(cè)試qsort排序整型數(shù)據(jù)
void test1()
{int arr[] = { 9,8,7,6,5,4,3,2,1,0 };int sz = sizeof(arr) / sizeof(arr[0]);print_arr(arr, sz);qsort(arr, sz, sizeof(arr[0]), cmp_int);print_arr(arr, sz);
}
int main()
{test1();return 0;
}

運(yùn)行結(jié)果:
在這里插入圖片描述

補(bǔ):void*
1.void* 類型的指針 - 不能進(jìn)行解引用操作符,也不能進(jìn)行±整數(shù)的操作
2.void* 類型的指針是用來(lái)存放任意類型數(shù)據(jù)的地址
3.void* 無(wú)具體類型的指針

代碼演示:
int main()
{char c = 'w';char* pc = &c;int a = 100;//int* p = &c;//不可以存放char*類型void* pv = &c;//存放char*pv = &a;//存放int*return 0;
}

案例:測(cè)試qsort排序結(jié)構(gòu)體數(shù)據(jù)

結(jié)構(gòu)體數(shù)據(jù)怎么比較呢?

  1. 按照年齡比較
#include<stdio.h>
#include<stdio.h>
struct Stu
{char name[20];int age;
};
int cmp_stu_by_age(const void* e1, const void* e2)
{return ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;
}
void test1()
{struct Stu arr[] = { {"zhanhsan", 20}, {"lisi", 30}, {"wangwu", 12} };int sz = sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), cmp_stu_by_age);
}
int main()
{test1();return 0;
}
  1. 按照名字比較
 struct Stu
{char name[20];int age;
};
int cmp_stu_by_name(const void* e1, const void* e2)
{return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}
void test2()
{struct Stu arr[] = { {"zhanhsan", 20}, {"lisi", 30}, {"wangwu", 12} };int sz = sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), cmp_stu_by_name);
}
int main()
{test1();return 0;
}

💘不知不覺,指針進(jìn)階(二)以告一段落。通讀全文的你肯定收獲滿滿,不久的將來(lái)會(huì)繼續(xù)更新指針進(jìn)階的內(nèi)容,讓我們繼續(xù)為C語(yǔ)言學(xué)習(xí)共同奮進(jìn)!!!

http://aloenet.com.cn/news/41356.html

相關(guān)文章:

  • 幾十元做網(wǎng)站營(yíng)銷團(tuán)隊(duì)找產(chǎn)品合作
  • 如何做泛解析網(wǎng)站百度知道怎么賺錢
  • wordpress建站教程主題推廣手段
  • 醫(yī)療美容培訓(xùn)網(wǎng)站建設(shè)站長(zhǎng)之家關(guān)鍵詞挖掘工具
  • 為某網(wǎng)站做網(wǎng)站推廣策劃方案制作網(wǎng)站的工具
  • 網(wǎng)站上名片如何做鄭州網(wǎng)站推廣報(bào)價(jià)
  • 廈門做網(wǎng)頁(yè)網(wǎng)站的公司企業(yè)官網(wǎng)建站
  • 老年大學(xué)網(wǎng)站建設(shè)網(wǎng)絡(luò)軟文
  • 手機(jī)兼職賺錢平臺(tái)飛豬關(guān)鍵詞排名優(yōu)化
  • 叢臺(tái)企業(yè)做網(wǎng)站推廣成人英語(yǔ)培訓(xùn)班哪個(gè)機(jī)構(gòu)好
  • 個(gè)人建網(wǎng)站教程seo工資多少
  • 做哪些網(wǎng)站不受法律保護(hù)廣告設(shè)計(jì)與制作
  • 畢業(yè)設(shè)計(jì)網(wǎng)站設(shè)計(jì)說明書寧波seo免費(fèi)優(yōu)化軟件
  • 金川做網(wǎng)站公司網(wǎng)絡(luò)推廣代運(yùn)營(yíng)公司
  • 免費(fèi)建站自己的網(wǎng)址域名注冊(cè)查詢官網(wǎng)
  • 網(wǎng)站建設(shè)好以后怎么管理百度關(guān)鍵詞搜索量統(tǒng)計(jì)
  • 數(shù)據(jù)庫(kù)網(wǎng)站制作北京seo推廣系統(tǒng)
  • 搜索引擎優(yōu)化大致包含哪些內(nèi)容或環(huán)節(jié)河北seo推廣公司
  • 建一個(gè)素材網(wǎng)站多少錢杭州網(wǎng)站制作排名
  • 廣州市荔灣區(qū)疫情最新消息重慶可靠的關(guān)鍵詞優(yōu)化研發(fā)
  • 可以做婚禮鮮花布置的網(wǎng)站外貿(mào)推廣平臺(tái)哪個(gè)好
  • 工業(yè)企業(yè)網(wǎng)站建設(shè)費(fèi)教育培訓(xùn)網(wǎng)站官網(wǎng)
  • 寶安網(wǎng)站制作公司合肥網(wǎng)絡(luò)seo推廣服務(wù)
  • wordpress圖片站點(diǎn)網(wǎng)站制作網(wǎng)站推廣
  • it培訓(xùn)網(wǎng)站模板seo小白入門教學(xué)
  • 做棋牌網(wǎng)站建設(shè)哪家便宜免費(fèi)數(shù)據(jù)查詢網(wǎng)站
  • 免費(fèi)網(wǎng)站制作案例汽車宣傳軟文
  • 微擎如何做網(wǎng)站百度我的訂單app
  • 網(wǎng)站開發(fā)用python嗎推廣策劃方案范文
  • 做網(wǎng)站要錢嗎sem優(yōu)化公司