函数 数组 指针 三者之间的关系
来源:互联网 发布:华泰证券网络培训学院 编辑:程序博客网 时间:2024/05/21 05:23
指针函数:(返回指针值的函数)
当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用
于需要指针或地址的表达式中。
简单的说:
函数可以返回 整型 字符行 也可以返回指针型的数据(也就是地址)
格式:类型说明符 * 函数名(参数)
int *fun(int a,int b)
例:
node *creatnode(int data)
{
node *temp=malloc(sizeof(node));
temp->data=data;
temp->left=NULL;
temp->right=NULL;
return temp;
}
函数指针:(指向函数的指针)
指向函数的指针 包含了函数的首地址,可以通过指针变量来调用函数。
简单的说:
定义一个指向函数的指针变量,用来存放某一函数的首地址,此指针变量指向该函数
调用一个函数,可通过函数名直接调用,也可以通过指向函数的指针变量来调用该函数
声明格式如下:
类型说明符 (*函数名)(参数) 其实这里不能称为函数名,应该叫做指针的变量名。
int (*fun)(int a,int b)
例:
int mymax(int a,int b)
{
if(a>b)
return a;
else
return b;
}
int main()
{
int x,y;
int max;
int (*p)(int,int);//函数指针 ==> 指向函数的指针变量
p = mymax;//mymax 为函数的首地址,p 指向 mymax
scanf("%d %d",&x,&y);
max = (*p)(x,y);//(*p) ==> mymax 通过p 指针来操作mymax()
printf("max = %d\n",max);
return 0;
}
函数指针的三种形式:
1.声明一个函数类型
typedef void(Myfun)(int a,int b);
//将函数类型命名为Myfun返回值为void
使用:
Myfun* mfp = NULL;//定义函数指针变量
2.声明一个函数指针类型
typedef void(*Myfun1)(int a,int b);
//声明了一个Myfun的函数指针 数据类型
使用:
Myfun mfp = NULL;//mfp 指向NULL
3.定义一个函数指针 变量
void (*Myfun2)(int a,int b);
使用:
Myfun2 = NULL;//Myfun2 指向NULL 直接对变量初始化
指针函数与函数指针的区别
指针函数是一个函数,返回值是指针(不能返回局部非静态变量的地址或局部指针非静态变量,函数一旦执行完就释放了)
函数指针是一个指针。指向一个函数
数组
数组的基本用法
int a[10];//a代表数组首元素的地址,&a代表整个数组的地址
//步长:a+1 = 4 &a+1 = 40
自定义数组类型
typedef int (typeArray)[10];
typeArray array;//用自定义类型定义数组变量
array[0] = 10;//给数组元素赋值
printf("array[0] = %d\n",array[0]);//打印数组元素的值
数组还原成指针
a[i] = *(a+i)
a[i][j] = *(*(a+i)+j)
指针数组
一个数组,其中的若干个元素均为指针类型的数据
int * array[4];
例:
char *Myarray[] = {"1111", "33333", "aaaa"};//指针 数组
数组指针
这个指针指向数组的首地址
int (*array)[4];
例:
int (*array)[4];//定义一个指向数组的指针 array
int a[4];
array = &a;
指针数组与数组指针的区别:
数组指针是指向数组首元素的地址的指针,其本质为指针
(这个指针存放的是数组首地址的地址,相当于2级指针,这个指针不可移动);
指针数组是数组元素为指针的数组,其本质为数组。
举例
数组指针:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#include<stdio.h>
int main()
{
char c[][3] = {"哥", "哥", "我", "岸", "上", "走"};
char (*p)[3];
int i; p=c; //将指针定位于c[0]
for(i=0;i<=5;i++)
{
printf("%s, ", *(p+i)); //或者将*(p+i)替换成*p++
}
printf("\n");
for(i=5;i>=0;i--)
{
printf("%s,",*(p+i)); //或者将*(p+i)替换成*p--
}
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#include<stdio.h>
int main()
{
char c[][3] = {"哥", "哥", "我", "岸", "上", "走"};
char (*p)[3];
int i; p=c; //将指针定位于c[0]
for(i=0;i<=5;i++)
{
printf("%s, ", *(p+i)); //或者将*(p+i)替换成*p++
}
printf("\n");
for(i=5;i>=0;i--)
{
printf("%s,",*(p+i)); //或者将*(p+i)替换成*p--
}
return 0;
}
指针数组:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#include<stdio.h>
int main()
{
int i;
char *pch[6] = {"妹","妹","你","坐","船","头"};
for(i=0;i<6;i++){
printf("%s, ",pch[i]);
}
printf("\n");
for(i=5; i>=0; i--){
printf("%s\n",pch[i]);
}
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#include<stdio.h>
int main()
{
int i;
char *pch[6] = {"妹","妹","你","坐","船","头"};
for(i=0;i<6;i++){
printf("%s, ",pch[i]);
}
printf("\n");
for(i=5; i>=0; i--){
printf("%s\n",pch[i]);
}
return 0;
}
0 0
- 函数 数组 指针 三者之间的关系
- 数组,指针与函数之间的关系
- 指针与数组,指针与函数之间的关系
- 指针与函数及指针与数组之间的关系
- 数组<->指针<->动态数组之间的关系
- 数组<->指针<->动态数组之间的关系
- 指针、引用、const常量三者之间的关系
- 数组与指针之间的微妙关系
- 数组 与 指针 之间的关系 分析
- 二维数组和指针之间的关系
- 指针 、指针与数组函数的关系
- 指针,数组,函数,三者的恩恩怨怨
- 数组、指针数组、数组指针、返回数组指针的函数的关系
- c/c++中指针与字符数组,指针与数组,数组指针与指针数组之间的关系。
- 解析二级指针与二维数组之间的关系
- 解析二级指针与二维数组之间的关系
- c语言,指针和数组大小之间的关系
- 指针与数组之间的关系与转换
- linux shell 之if-------用if做判断
- 技术代码分析模板
- 优化sql
- C#中 如何通过路径实现文件上传功能
- 多种数据过滤与降维算法
- 函数 数组 指针 三者之间的关系
- 开源一个Java Class实现Openfire登陆、推出、消息发送,方便其他系统集成IM功能了
- 使用PopWindow时距离边界有间隙的解决办法
- java 中关于接口定义的要求
- (转)Android动画效果之Tween Animation(补间动画)
- 变量和变量使用
- oracle回收站
- JavaScript闭包
- 【R】在CentOS7下编译安装R3.3.2和SparkR 二(R集群安装)