当前位置: 首页 > news >正文

c语言指针3

int main() {int ar[] = { 1,2,3,4,5,6,7,8,9,20 };int n = sizeof(ar) / sizeof(ar[0]);int* p1 = &ar[0];int* p2 = &ar[n];printf("%d\n", p2 - p1);  //元素的个数 40/4 = 10return 0;
}

输出:10

注:

1.p2+p1语法错误

2.p2-(char*)p1 二义性

 

int *p;
*p = 10;  //野指针

野指针没有数据空间

 

结构体

指针指向结构体时,可以通过指向符->操作其内部成员,简洁方便

typedef struct Student {char* name;int age;float height;
}Student;int main() {Student s = { (char*)"名字",30,170.5 };printf("name = %s, age = %d, height = %f\n", s.name, s.age, s.height);printf("name = %s, age = %d, height = %f\n", (&s)->name, (&s)->age, (&s)->height);Student* ps = &s;printf("name = %s, age = %d, height = %f\n", (*ps).name, (*ps).age, (*ps).height);printf("name = %s, age = %d, height = %f\n", ps->name, ps->age, ps->height);return 0;
}

 

 链表

#define ElemType int
typedef struct ListNode{ElemType data;struct ListNode *next;
}ListNode;typedef ListNode* List;int main(){List head;ListInit(&head);ListCreate(&head);
}

 

复杂指针解析

C/C++所有复杂的声明结构,都是由各种声明的嵌套构成的,理解复杂指针可以使用左右法则

左右法则--首先从未定义的标识符开始看起,然后往右看,再往左看,每当遇到圆括号,就应该调转阅读方向,一旦解析完圆括号里面的所有东西,就跳出圆括号,重复这个过程直到整个声明解析完成

复杂指针:

1.int * (* (*func) (int *)) [10];

2.int (*func)(int *, int (*)(int *));

3.int (*func[5])(int *);

4.int (*(*func)[5](int *);

5.int (*(*func)(int *)) [5];

6.(*(void(*) ())0)();

7.void(*set_new_handler(void(*f)()))();

 1.int * (* (*func) (int *)) [10];

首先func是一个指针,该指针指向一个函数,函数的特征是具有一个整型指针参数和一个指针的返回值,该指针指向的是数组,数组具有十个元素,其中每个元素都是整型指针

2.int (*func)(int *, int (*)(int *));

首先func是一个指针,该指针指向一个函数,函数的特征是具有两个参数和一个返回值,其参数一个是整型指针参数,另一个是函数指针的参数,函数返回值为整型值

3.int (*func[5])(int *);

首先func是一个数组,数组具有五个元素,其中每个元素都是一个指针,该指针指向函数,函数的特征是具有一个整型指针的参数和一个整型的返回值

4.int (*(*func)[5](int *);

首先func是一个指针,该指针指向数组,数组具有五个元素,每个元素都是指针,指针指向函数,函数特征为一个整型指针参数和一个整型返回值

5.int (*(*func)(int *)) [5];

首先func是一个指针,指针指向函数,函数特征为一个整型指针参数和一个指针的返回值,其返回值指针指向的是具有五个整型数据的数组

http://www.xdnf.cn/news/96787.html

相关文章:

  • 初识分布式事务原理
  • VMware中CentOS 7虚拟机设置固定IP(NAT模式)完整教程
  • Scanpy可视化技巧--UMAP图优化
  • 数据的加载与保存
  • 基于Quill的文档编辑器开发日志(上)——前端核心功能实现与本地存储管理
  • Java 环境配置详解(Windows、macOS、Linux)
  • 新书推荐——《游·思——看世界 上》孔祥超 著
  • 【MQ篇】RabbitMQ之工作队列模式!
  • Kotlin中实现静态
  • 智能文档解析系统架构师角色定义
  • 链表系列一>两数相加
  • 如何将 Azure Active Directory (Azure AD) 作为 SAML IdP 对接到 Keycloak
  • 从零手写 RPC-version1
  • django软件开发招聘数据分析与可视化系统设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
  • 搭建Stable Diffusion图像生成系统实现通过网址访问(Ngrok+Flask实现项目系统公网测试,轻量易部署)
  • JavaEE学习笔记(第二课)
  • C#开发usb hid 简易GUI调试工具记录
  • 2025山东省职业院校技能大赛网络安全赛项样题
  • rk3588 驱动开发(二)第四章嵌入式 Linux LED 驱动开发实验
  • 初阶数据结构--排序算法(全解析!!!)
  • 【JVS更新日志】物联网、智能BI、智能APS 4.23更新说明!
  • Android仿今日头条Kotlin版本
  • gem5教程第五章 了解gem5默认配置脚本
  • eplan许可证与防火墙安全软件冲突
  • MobileNetV2:面向移动端的高效神经网络架构革新——突破轻量化模型的设计边界
  • 三目云台转动性能稳定性
  • C# 中的 `lock` 关键字本质
  • 3.6/Q1,GBD数据库最新文章解读
  • 鸿蒙中的并发线程间通信、线程间通信对象
  • 【计算机视觉】CV项目实战- SiamMask 单阶段分割跟踪器