指针的相关话题:(Relevant topic of Pointer )
1.函数指针(func_pointer):用指针形式构造被调用函数。(很少见)
2.结构体函数指针(struct_pointer:指的是形参是结构体的指针)
2.1 函数参数角度是值传递还是地址传递。(1.返回return 2.输入的结构体函数用指针)
2.2 结构体类型的数组 (需要定义班级就是班级)
3.指针和数组
4.算术运算和关系运算
5.链表 Link_node
6.嵌套指针(嵌套结构体:Emebd structure)
7.返回类型指针的问题
针对程序这类问题不是自然科学,不用锱铢必较,需要调用API就调用,不用再去优化怎么的。
只需要知道输入是什么,输出是什么。OK
1.函数指针
解读:
1.定义一个函数名为point_func,形参为整型 a,b,返回类型为int型,其中函数名为函数的地址。
2.构造指针和函数参数类型一样,无论是返回类型还是形参。
3.这样指针就可以间接调用函数实现相应功能。
#include <stdio.h>
int pointer_func(int a,int b)
{
return (a+b);
}
int main()
{
int c=0;
int (*p)(int a,int b); //定义一个函数指针(a和b),一定要符合其参数规范
p = pointer_func; //指针本质间接操作函数、变量(函数名就是指针)
c = (*p)(3,4); //将c赋值给这个即可
printf("%d\n",c);
}
2.结构体函数指针(struct_pointer:指的是形参是结构体的指针)
2.1 函数参数角度 结构体 是值传递还是地址传递
结构体变量作为函数的参数只能作为 值传值函数,即不改变结构体变量本身在main中的值。
如果想要修改主程序的值,需要加return(返回值)或者参数本身是 结构体指针 参数。
值传递
#include<stdio.h>
typedef struct check{
int a;
int b;
}check;
extern int a; //无用,只为测试
//无返回值return和结构体参数指针,只是普通结构体变量
//则,该参数为结构体的函数是 值传递Value transform
void change(check random)
{
random.a=10;
random.b=12;
}
int main()
{
check check1;
printf("please enter relevant paremeter about check strucure:\n");
scanf("%d",&check1.a);
scanf("%d",&check1.b);
change(check1);
printf("check1.a= %d,check1.b = %d\n",check1.a,check1.b);
}
参数传递:返回return结构体
区别就是值传递只是改变void变为结构体名称,然后在主函数中定义结构体去接收她即可。
#include<stdio.h>
typedef struct check{
int a;
int b;
}check;
//无返回值return和结构体参数指针,只是普通结构体变量
//则,该参数为结构体的函数是 值传递Value transform
//特别的,返回的方式只能返回一个变量的值
check change(check random)
{
random.a=10;
random.b=12;
return random;
}
int main()
{
check check1;
printf("please enter relevant paremeter about check strucure:\n");
scanf("%d",&check1.a);
scanf("%d",&check1.b);
check1=change(check1);
printf("check1.a= %d,check1.b = %d\n",check1.a,check1.b);
}
参数传递:结构体指针 返回结构体指针
#include<stdio.h>
typedef struct check{
int a;
int b;
}check;
//无返回值return和结构体参数指针,只是普通结构体变量
//则,该参数为结构体的函数是 值传递Value transform
//特别的,返回的方式只能返回一个变量的值
void change(check *random)
{
random->a=10;
random->b=12;
}
int main()
{
check check1;
printf("please enter relevant paremeter about check strucure:\n");
scanf("%d",&check1.a);
scanf("%d",&check1.b);
change(&check1);
printf("check1.a= %d,check1.b = %d\n",check1.a,check1.b);
}
(3)指针的数组