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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

指针数组,数组指针,函数指针,main函数实质,二重指针,函数指针作为参数,泛型函数

發布時間:2024/9/27 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 指针数组,数组指针,函数指针,main函数实质,二重指针,函数指针作为参数,泛型函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


1、指針數組

?? 數組里面的每個元素都是指針。

?? 指針數組的案例如下:

?? 易犯錯誤:

2、數組指針

? 歸根結底還是指針,只是取*的時候能夠取出一整個數組出來。

數組指針:(一個指針指向了數組,一般和二維數組搭配使用)。

下面的(p+1)表示的是加過20個字符。

?

3、函數指針:

gcc編譯的時候增加一些調試信息的方式是:

gcc demo.c –g –o app?? -g表示增加一些調試信息

objdump –dSsx app > file?? app反匯編,然后重定向到file文件中。函數指針定義:

?

4、指針作為參數

?

sizeof(p)

sizeof(*p)

p+1

char *? p[10]

40

4

加過4Byte

char **p

4

4?? 注意sizeof**P= 1

加過4個字節

char (*p)(void) 函數指針

4

無大小

無意義

char (*p)[20]? 數組指針

?

?

20

?

5main函數實質介紹:

?

6、二重指針:

指針數組和二重指針實際上是等價的。

?

7、數組指針等價于二維數組:

?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

8、函數指針作為函數的參數

?

9、泛型函數:

#include <stdio.h>

#include <time.h>

#include <stdlib.h>

?

void show_arry(int a[], int n)

{

???????? inti;

???????? for(i = 0; i < n; i++)

?????????????????? printf("%d\n",a[i]);

???????? putchar('\n');

}

void init_arry(int a[], int n)

{

???????? inti;

???????? srand(time(NULL));

???????? for(i = 0; i < n; i++)

?????????????????? a[i]= rand() % 100;

}

int cmp_int(void *a, void *b)

{

???????? intx = *((int *)a);

???????? inty = *((int *)b);

???????? returnx > y;

}

void swap_int(void *a, void *b)

{

???????? inttmp;

???????? tmp= *((int *)a);

???????? *((int*)a) = *((int *)b);

???????? *((int*)b) = tmp;

}

//泛型模板是通過void *的方式得到的。

void bubble_sort(void *a, int n,int(*cmp)(void *, void *), void (*swap)(void *, void *))

{

???????? inti, j;

???????? for(i = 0; i < n; i++)

?????????????????? for(j = 0; j < n-i-1; j++)

??????????????????????????? if(cmp((void *)((int *)a+j), (void *)((int *)a+j+1)) > 0)

??????????????? //注意這里的(int*)只是告訴編譯器傳遞的是4個字節的長度,對于float的也是四字節的。

???????????????????????????????????? swap((void*)((int *)a+j), (void*)((int*)a+j+1));

}

/*

int main(void)

{

???????? inta[10];

???????? init_arry(a,10);

???????? show_arry(a,10);

???????? bubble_sort(a,10, cmp_int, swap_int);

???????? show_arry(a,10);

}

*/

int cmp_float(void *a, void * b)

{

???????? return*((float *)a) > *((float *)b);

}

void swap_float(void *a, void *b)

{

???????? floattmp;

???????? tmp= *((float *)a);

???????? *((float*)a) = *((float *)b);

???????? *((float*)b) = tmp;

?

}

void show_float(float a[], int n)

{

???????? inti;

???????? for(i = 0; i < n; i++)

?????????????????? printf("%f\n",a[i]);

???????? putchar('\n');

}

int main(void)

{

???????? floata[5] = {1.3, 4.5, 2.3, 1.2, 3.7};

???????? bubble_sort(a,5, cmp_float, swap_float);

???????? show_float(a,5);

}

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的指针数组,数组指针,函数指针,main函数实质,二重指针,函数指针作为参数,泛型函数的全部內容,希望文章能夠幫你解決所遇到的問題。

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