温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

清晰弄懂 函数 指针 与数组之间的关系

发布时间:2020-07-01 07:40:42 来源:网络 阅读:413 作者:梦醒的鸭子 栏目:编程语言

指针函数:(返回指针值的函数)

当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用

于需要指针或地址的表达式中。

简单的说:

函数可以返回 整型 字符行 也可以返回指针型的数据(也就是地址)

格式:类型说明符 * 函数名(参数)

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

指针数组:

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


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI