指针数组,数组指针,函数指针,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函数实质,二重指针,函数指针作为参数,泛型函数相关推荐
- python 成员函数 泛型函数_【一点资讯】白学这么多年 Python?连泛型函数都不会写? www.yidianzixun.com...
泛型,如果你尝过java,应该对他不陌生吧.但你可能不知道在 Python 中(3.4+ ),也可以实现 简单的泛型函数.在Python中只能实现基于单个(第一个)参数的数据类型来选择具体的实现方式, ...
- Python学习笔记7:函数对象及函数对象作參数
一.lambda函数 比如: fun1 = lambda x,y: x + y print fun1(3,4) 输出:7 lambda生成一个函数对象.该函数參数为x,y,返回值为x+y.函数对象赋给 ...
- 指针数组,数组指针,函数指针,main函数实质,二重指针,函数指针作为參数,泛型函数...
1.指针数组 数组里面的每一个元素都是指针. 指针数组的案比例如以下: 易犯错误: 2.数组指针 归根结底还是指针,仅仅是取*的时候可以取出一整个数组出来. 数组指针:(一个指针指向了数组.一般 ...
- c/c++ 函数、常量、指针和数组的关系梳理
压力才有动力,15年中旬就要准备实习,学习复习学习复习学习复习学习复习--无限循环中,好记性不如烂笔头--从数组开始,为主干. c 的array由一系列的类型相同的元素构成,数组声明包括数组元素个数和 ...
- 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)
相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...
- 指针||指针和数组||指针和函数||指针、数组、函数 案例描述:封装一个函数,利用冒泡排序,实现对整型数组的升序排序
指针 指针的基本概念 指针的作用: 可以通过指针间接访问内存 内存编号是从0开始记录的,一般用十六进制数字表示 可以利用指针变量保存地址 指针变量的定义和使用 指针变量定义语法: 数据类型 * 变量名 ...
- C++阶段01笔记07【指针(基本概念、变量定义和使用、内存空间、空指针和野指针、const修饰指针、指针和数组、指针和函数)】
C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 7 指针 7.1 指针的基本概念 7.2 指针变量的定义和使用 示例 7.3 指针所占内存空间 示例 7.4 空指针和野指针 示 ...
- 指针、数组、函数阶段小结
引子:数据在内存中是如何存储的,又是如何读取的?内存编号就是内存的地址(内存中每个字节都有一个编号,即地址) 1.概念: 地址:内部存储器的编号,称为地址.如变量a的位置编号,变量b的位置都是指针. ...
- C语言程序设计 | 指针的进阶(一):字符指针、数组指针、指针数组、函数指针
指针的进阶(一)目录: 字符指针 数组指针和指针数组 函数指针 字符指针 在开始讲解这一章节之前,我们需要了解指针前面声明的类型的意义 类型 * 指针名 对于指针来说,我们在给指针进行声明时,我们声明 ...
最新文章
- 推荐一个网站拿下机器学习优质资源!搜索效率极大提高
- python默认参数只被解释一次_深入讲解Python函数中参数的使用及默认参数的陷阱...
- Ubuntu各大分支版本功能介绍及下载地址
- java和jvm_java 和 JVM
- Sharepoin学习笔记—架构系列--08 Sharepoint的数据模型(DataModel)、数据管理(Data Management)与查询(Query System)
- LeetCode LCP 33. 蓄水(暴力枚举)
- HOHO 拿了個小嘉獎 Happy一下 可惜過年可能被留下...痛苦
- unity脚本生命流程
- bellman ford优先队列优化简介模板
- 机器学习基础算法23-XGBoost实践
- CentOS 5.5 使用 EPEL 和 RPMForge 软件库
- Aitit aop之道 艾龙著 需要整合zop资料包东西 第1章 AOP的产生 1.1 软件开发方法的演进 1.2 AOP产生的前奏——把系统看做一批关注点
- js获取网络时间(axios获取响应头时间)
- HTML-----超链接与表格Lable(详细可看)
- quartz定时任务集群版
- 黎活明给程序员的忠告
- springboot 调用萤石Saas平台
- 解决方案:macOS Mojave下Pycharm运行pygame无法加载外星人游戏图片以及无法修改颜色
- 航拍“中国南北地理分界线” 感受独特景观
- JAVA获取百度网盘下载真实地址