设为首页 加入收藏

TOP

指针数组,数组指针,函数指针,main函数实质,二重指针,函数指针作为参数,泛型函数
2015-07-20 18:07:54 来源: 作者: 【 】 浏览:13
Tags:指针 函数 main 实质 二重 作为 参数
??

1、指针数组

数组里面的每个元素都是指针。

指针数组的案例如下:

\

易犯错误:

\

2、数组指针

归根结底还是指针,只是取*的时候能够取出一整个数组出来。

数组指针:(一个指针指向了数组,一般和二维数组搭配使用)。

\

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

\

3、函数指针:<??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KCjxwPtTaZ2NjseDS67XEyrG68tT2vNPSu9CptffK1NDFz6K1xLe9yr3Kx6O6PC9wPgoKPHA+Z2NjIGRlbW8uYyCoQ2cgqENvIGFwcCAgCi1nse3KvtT2vNPSu9CptffK1NDFz6I8L3A+Cgo8cD5vYmpkdW1wIKhDZFNzeCBhcHAgPiBmaWxlICAKvathcHC3tLvjseCjrMi7uvPW2Laoz/K1vWZpbGXOxLz+1tCho7qvyv3WuNXrtqjS5aO6PC9wPgoKPHA+PC9wPgoKPHA+IDxpbWcgc3JjPQ=="https://www.cppentry.com/upload_files/article/49/1_plld1__.png" alt="\">

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

#include

#include

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);

}

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇[ACM] POJ 2506 Tiling (递推,.. 下一篇[ACM] POJ 3259 Wormholes (bellm..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: