void*、 指针数组、数组指针、指针函数、函数指针
来源:互联网 发布:2017网络暴力的例子 编辑:程序博客网 时间:2024/06/08 08:03
总是遇到这几个坑点void*、 指针数组、数组指针、指针函数、函数指针,下面来一一解释。
void * ----无类型指针,它是个指针,一个没有类型的指针,可以指向任何类型指针数据。比较常见的形式是出现在函数中进行传参,
下面的举个例子来说明这个void *,有这个一个函数int add (void *a,void *b)实现的功能是将传过来的地址的内容相加(地址存放的内容相加);
num[0] = 5
num[1] = 9
num[2] = 6
num[3] = 10
/************************/
数组指针------它是一个指针,在以为数组中仅表示指向数组中的某个元素,可以用于二维数组中,表示行数,因此在二维数组中也被称为行指针。
int a[2][4];
int (*p)[4]; //定义一个数组指针,指向含4个元素的一维数组。
p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
p++; //p=p+1;p+1跨过行4個元素,从a[0][]指向了行a[1][]
指针函数------返回值为指针的函数,当在定义一个函数的时候,可以定义为返回值为void 函数,可以定义为返回值为int函数,也可以定义为返回值作为float函数 ,也存在著返回值为int *函数。其实一眼就看出来了。
void fun( );//返回值为void函数
int fun( );//返回值为int函数
float fun( );//返回值为float函数
int * fun( ) ; //返回值为int* 函数,也就是指针函数,当然也可以float* 指针函数
函数指针------顾名思义,函数指针的意思是,函数指针,它是一个指针。既然是函数的指针,无非就是用来指向一个函数的了,常见的用法是函数指针作为一个函数的列表参数传递,使得这个函数(调用者)可以调用另一个函数(被调用者,被调用者称为回调函数)。
int (*funame)(int a)
void * ----无类型指针,它是个指针,一个没有类型的指针,可以指向任何类型指针数据。比较常见的形式是出现在函数中进行传参,
下面的举个例子来说明这个void *,有这个一个函数int add (void *a,void *b)实现的功能是将传过来的地址的内容相加(地址存放的内容相加);
- int add1 (void *a,void *b){
- /*
- (int*)由于add1的函数列表中定义的是void* 任何类型的指针,但是在main函数传进来的指针是int *类型的,所以这裡要进行强制转换。
- */
- int sum = *((int*)a )+*((int*)b); ////强制转换
- return sum;
- }
- float add2 (void *a,void *b){
- float sum = *((float*)a )+*((float*)b); //强制转换
- return sum;
- }
- int main(){
- int num1 = 3;
- int num2 = 5;
- float num3 = 6.5;
- float num4 = 7.5;
- int i;
- float j;
- i = add1(&num1,&num2); //传入int* 指针
- j = add2(&num3,&num4); //传入float* 指针
- printf("int sum = %d\n",i);
- printf("float sum = %f\n", j);
- system("pause");
- return 0;
- }
- /*********运行结果**********/
- int sum = 8
- float sum = 14.000000
- /**************************/
- 指针数组------首先看到的是数组在后面,因此指针数组是一个数组,裡面的元素是什麽呢?元素是指针!!!
- 定义形式为:"类型名 *数组标识符[数组长度]"
- 为了更容易理解举一个例子,将4个地址放进数组,然后将地址的内容打印输出
- int main(){
- int num1 = 5;
- int num2 = 9;
- int num3 = 6;
- int num4 = 10;
- int i;
- int *str[4] = {&num1,&num2,&num3,&num4}; //传入4个地址,元素是地址;
- for(i = 0;i<=3; i++){
- printf("num[%d] = %d\n",i,*str[i]); //打印输出
- }
- system("pause");
- return 0;
- }
num[0] = 5
num[1] = 9
num[2] = 6
num[3] = 10
/************************/
数组指针------它是一个指针,在以为数组中仅表示指向数组中的某个元素,可以用于二维数组中,表示行数,因此在二维数组中也被称为行指针。
定义 int (*p)[n];
数组指针在一维数组中的意义---元素指針,指向某個元素:
int a[3] = [4,5,6];
int(*p)[2];//定义一个指针,指向某个数组的第3个元素。
p = a;//将一维数组的地址赋值给数组指针p
结果p[2] = 6;
int a[2][4];
int (*p)[4]; //定义一个数组指针,指向含4个元素的一维数组。
p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
p++; //p=p+1;p+1跨过行4個元素,从a[0][]指向了行a[1][]
指针函数------返回值为指针的函数,当在定义一个函数的时候,可以定义为返回值为void 函数,可以定义为返回值为int函数,也可以定义为返回值作为float函数 ,也存在著返回值为int *函数。其实一眼就看出来了。
void fun( );//返回值为void函数
int fun( );//返回值为int函数
float fun( );//返回值为float函数
int * fun( ) ; //返回值为int* 函数,也就是指针函数,当然也可以float* 指针函数
函数指针------顾名思义,函数指针的意思是,函数指针,它是一个指针。既然是函数的指针,无非就是用来指向一个函数的了,常见的用法是函数指针作为一个函数的列表参数传递,使得这个函数(调用者)可以调用另一个函数(被调用者,被调用者称为回调函数)。
int (*funame)(int a)
0 0
- void*、 指针数组、数组指针、指针函数、函数指针
- 指针,指针数组,数组指针,函数指针
- 函数指针指针数组
- 数组指针、函数指针
- 指针&数组&函数指针
- 函数指针数组指针!
- 指针数组,数组指针,函数指针,指针函数,多级指针
- 函数指针/函数指针数组
- 函数指针,函数指针数组
- 函数指针、指针数组与数组指针
- 解析 指针数组,数组指针,函数指针
- 函数指针、数组指针、指针数组
- 函数指针,数组指针,指针数组
- C++指针数组、数组指针、函数指针
- 函数指针,指针数组和数组指针
- 数组指针,指针数组和函数指针
- 指针数组 数组指针 函数指针 函数指针数组
- 理解数组指针、指针数组、函数指针、函数指针数组
- CSS基础学习笔记(一)
- Ubuntu下怎么安装jdk
- Raft 分布式一致性算法
- 谈谈大学这两年的学习感想!
- spring中的依赖注入方法
- void*、 指针数组、数组指针、指针函数、函数指针
- Windows下快速搭建redis集群
- 订单分库分表实践总结以及关键步骤
- HDU 5373 The shortest problem
- 浅谈MySQL中优化sql语句查询常用的30种方法
- 使用return结束一个方法
- 全角半角字符相互转换
- 28
- 关于MATLAB 中的 opengl错误