1、指针数组

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

指针数组的案比例如以下:

易犯错误:

2、数组指针

归根结底还是指针,仅仅是取*的时候可以取出一整个数组出来。

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

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

3、函数指针:

在gcc编译的时候添加一些调试信息的方式是:

gcc demo.c –g –o app  
-g表示添加一些调试信息

objdump –dSsx app > file  
将app反汇编。然后重定向到file文件里。函数指针定义:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" 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 <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函数实质,二重指针,函数指针作为參数,泛型函数的更多相关文章

  1. C语言利用va_list、va_start、va_end、va_arg宏定义可变參数的函数

    在定义可变參数的函数之前,先来理解一下函数參数的传递原理: 1.函数參数是以栈这样的数据结构来存取的,在函数參数列表中,从右至左依次入栈. 2.參数的内存存放格式:參数的内存地址存放在内存的堆栈段中, ...

  2. OC可变參数的函数实现va_start、va_end、va_list的使用

    一.简单介绍 我们常常在编程的时候看见类似这种代码,如图1.1 图1.1 或者是这种可变參数,如图1.2 图1.2 二.基本知识介绍 在学习怎样写这样的格式的函数前,先简介几个经常使用的宏: 下面摘自 ...

  3. python可变參数调用函数问题

    一直使用python实现一些想法,近期在使用python的过程中出现这样一个需求,定义了一个函数.第一个是普通參数.第二个是默认參数,后面还有可变參数,在最初学习python的时候,都知道非keywo ...

  4. C中參数个数可变的函数

    一.什么是可变參数 我们在C语言编程中有时会遇到一些參数个数可变的函数,比如printf()函数,其函数原型为: int printf( const char* format, ...); 它除了有一 ...

  5. Effective JavaScript Item 22 使用arguments来创建接受可变參数列表的函数

    本系列作为Effective JavaScript的读书笔记. 在Item 21中,介绍了结合apply方法实现的可变參数列表函数average,它实际上仅仅声明了一个数组作为參数,可是利用apply ...

  6. cmake函数參数解析

    近期在迁移公司的make系统到cmake上.发现cmake的function參数非常奇怪.比如,假设我们向一个function传递list作为參数,在function中,形參会变成例如以下状况: se ...

  7. Python学习笔记7:函数对象及函数对象作參数

    一.lambda函数 比如: fun1 = lambda x,y: x + y print fun1(3,4) 输出:7 lambda生成一个函数对象.该函数參数为x,y,返回值为x+y.函数对象赋给 ...

  8. 各种python 函数參数定义和解析

    python 中的函数參数是赋值式的传递的,函数的使用中要注意两个方面:1.函数參数的定义过程,2.函数參数在调用过程中是怎样解析的. 首先说一下在python 中的函数调用过程是分四种方式的.这里且 ...

  9. c 语言函数可变參数的处理

    /************************************************************************* > File Name: va_list.c ...

随机推荐

  1. 时间戳显示格式为几天前、几分钟前、几秒前---vue过滤器

    //时间显示问题(几天前.几分钟前)Vue.filter('fomatTime', function (valueTime) { if(valueTime){ var newData = Date.p ...

  2. expdp dblink

    客户端创建dblik create public database link [link_name] connect to {username} identified by "{passwo ...

  3. Bullet:MySQL增强半同步参数rpl_semi_sync_master_wait_point值AFTER_SYNC和AFTER_COMMIT的对比实验

    MySQL 5.7.22启用增强半同步复制 MySQL对该参数值的描述 Semisync can wait for slave ACKs at one of two points, AFTER_SYN ...

  4. BZOJ 1711 吃饭dining/Luogu P1402 酒店之王 拆点+最大流流匹配

    题意: (吃饭dining)有F种食物和D种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一种食物和一种饮料.现在有n头牛,每头牛都有自己喜欢的食物种类列表和饮料种类列表,问最多能使几头牛同时享 ...

  5. 珂朵莉树(Chtholly Tree)学习笔记

    珂朵莉树(Chtholly Tree)学习笔记 珂朵莉树原理 其原理在于运用一颗树(set,treap,splay......)其中要求所有元素有序,并且支持基本的操作(删除,添加,查找......) ...

  6. 2 SQL 查询基础

    2 查询基础 2-1 SELECT语句基础 通过SELECT语句查询并选取必要数据的过程称为匹配查询或查询(query). 子句是SQL语句的组成要素,是以SELECT或者FROM等作为起始的短语. ...

  7. 安装composer及切换镜像为国内镜像

    一.下载composer php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" 下面的 ...

  8. PHP:Mysqli 基础类

    文章来源:http://www.cnblogs.com/hello-tl/p/7592594.html <?php /** * __construct($Mysql_config) 构造函数 $ ...

  9. 集训第四周(高效算法设计)A题 Ultra-QuickSort

    原题poj 2299:http://poj.org/problem?id=2299 题意,给你一个数组,去统计它们的逆序数,由于题目中说道数组最长可达五十万,那么O(n^2)的排序算法就不要再想了,归 ...

  10. CodeForces 159E

    题目大意: 给定一堆带颜色和高度的魔方 用两种颜色的魔方,一种颜色接一种颜色向上拼接搭建成一个高塔,求高塔的最长高度,以及将拼接的过程中对应的编号顺序输出 多种情况成立输出任意一种即可 这里首先要对颜 ...