指针数组,数组指针,函数指针,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
加過4個Byte
char **p
4
4?? 注意sizeof(**P)= 1
加過4個字節
char (*p)(void) 函數指針
4
無大小
無意義
char (*p)[20]? 數組指針
?
?
20
?
5、main函數實質介紹:
?
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);
}
總結
以上是生活随笔為你收集整理的指针数组,数组指针,函数指针,main函数实质,二重指针,函数指针作为參数,泛型函数...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [New Portal]Windows
- 下一篇: HDFS设计思路,HDFS使用,查看集群