C语言指针的问题

发布时间 2024-01-07 20:05:48作者: 月尘清心

指针的相关话题:(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)指针的数组