*指针_函数指针、指针控制数组、链表(结构体指针)
来源:互联网 发布:项目经理考试软件app 编辑:程序博客网 时间:2024/05/22 14:02
指针的相关基本概念在之前的文章: 指针_基本概念 里讲过
r->和(*r).
r->这种写法和(*r).是完全等效的,但是省去了两个字符。
strcpy((*r).name,"Leigh");
您可以像对待一个普通结构体变量那样对待*r,但在遇到C的操作符优先级问题时要小心。如果去掉*r两边的括号则代码将无法编译,因为“.”操作符的优先级高于“*”操作符。使用结构体指针时不断地输入括号是令人厌烦的,为此C语言引入了一种简记法达到相同的目的:
strcpy(r->name,"Leigh");
函数指针(指针*函数)
#include<stdio.h>void main(){int max(int, int);//两个函数的“引用性声明”int min(int, int);int(*p)(int, int);//p的类型用 int(*)(int int)表示//【定义指针名字p,可以存放int型返回值,且有2个int的形参的函数】int a, b, c, n;printf("输入两个要比较大小的值");scanf("%d%d", &a,&b);printf("请选择求1(最大值),2(最小值)");scanf("%d", &n);switch (n)//选择所要用到的函数{case 1: p = max; break;case 2: p = min; break;default:break;}c = (*p)(a, b);printf("相应结果:%d", c);}int max(int x, int y){return (x > y) ? x : y;}int min(int x, int y){return (x < y) ? x : y;}
P266:存储空间的起始地址(又称入口地址)称为这个函数的指针
函数像变量一样也可以用 函数名 或者 函数指针 变量来表示(详见 指针_基础概念)
指针控制数组(指针*数组)
一维数组
#include<stdio.h>void main(){int a[5];//int *q;int *p = &a[0]; //此行及以下3行等价//int *p; p = &a[0][0]; //int *p = a;for (int i = 0; i < 5; i++)a[i] = i;for (int i = 0; i < 5; i++)printf("%d", a[i]);//下标法printf("\n");for (int i = 0; i < 5; i++)printf("%d", *(a+i));//数组名及元素符号计算元素地址/*for (int q = a; q < (a+5); q++)printf("%d", *q);//用指针指向当前数组元素=========不知道为啥,我的vs2017的编译器不给过= =。。。*/}书上P232: a[i]就是*(a+i)
二维数组
#include<stdio.h>void main(){int a[5][5];//数组名a,就是数组的首地址,就是第一个元素(a[0][0])的地址,可以把这个地址让同类型的指针存起来for (int i = 0; i < 5; i++){for (int j = 0; j < 5; j++){a[i][j] = i + j;printf("%d", a[i][j]);}printf("\n");}printf("下面是用指针引用的数组\n");for (int i = 0; i < 5; i++){for (int j = 0; j < 5; j++){*(*(a+i) + j) = i + j;//与上面等效,见书P246printf("%d", a[i][j]);}printf("\n");}}书P246:
a[i]等价于*(a+i)
因此a[0]+1和*(a+0)+1都是&a[0][1]
故而*(a[0]+1)和*(*(a+0)+1)【或*(*a+1)】就是a[0][1]的值
链表【结构体指针】(指针*结构体)
指针既然什么同类型的地址都能存,那么用户做的结构体当然同类型的指针变量也能存了
#include<stdio.h>void main(){struct MyStruct{int num;struct MyStruct *Xiayige;//这就是嵌套定义了自己结构体类型的“下一个”指针};//定义在main函数里,只在main函数里有效struct MyStruct a, b;//类似于“int a,b;”struct MyStruct *head, *p;a.num = 1; b.num = 2;//我就建个静态链表……省事head = &a;a.Xiayige = &b;b.Xiayige = NULL;p = head;//用指针变量遍历访问链表do {printf("“下一个”结点地址:%d,当前节点所存的值%d\n", p->Xiayige, p->num);p = p->Xiayige;} while (p != NULL);}
多重指针(指针*指针)
例如:int **p;之类的
详见之前的 指针_基本概念里
其它的讲解指针的文章(解释(*p).与p->的文章):<http://blog.sina.com.cn/s/blog_60d3a48a0100yqcg.html>
0 0
- *指针_函数指针、指针控制数组、链表(结构体指针)
- []数组_函数调用数组 、指针数组、结构体数组
- 07指针 指针与数组 指针与字符串 指针与函数 结构体与指针 宏
- 指针结构体_数组指针结构体_指针数组结构
- 指针数组 指针的指针 二维数组指针 结构体指针 链表
- 函数指针,结构体指针
- 指针与函数_函数指针数组
- 指针,指针数组,数组指针,函数指针
- C语言_函数指针数组指针
- 函数指针指针数组
- 数组指针、函数指针
- 指针&数组&函数指针
- 函数指针数组指针!
- 48_结构体指针数组
- 指针数组,数组指针,函数指针,指针函数,多级指针
- C语言中的指针(指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针)
- 结构体数组指针
- 结构体指针数组
- git 基本命令
- BZOJ 4403: 序列统计 Lucas
- 8天学通MongoDB——第二天 细说增删查改
- Kmeans python 可视化
- thinkphp怎样获取控制器名称和操作名称(不是在模板里面获取)
- *指针_函数指针、指针控制数组、链表(结构体指针)
- leetcode-329. Longest Increasing Path in a Matrix
- 基于SpringBoot的微服务与“头文件”
- tomcat 远程调试配置
- MySql 外键
- highcharts绘制饼图html页面源码
- 解决easyUI跨域问题
- Redis集群搭建与简单使用
- 昨天没做出来的一道题目,不难,但是一直出现段错误