C 深入指针(4)

目录

一、字符指针变量

1 初始化

2 与字符串数组的区别

二、数组指针变量 

1 初始化

2 二维数组传参本质

三、函数指针变量

1 初始化

2 用法 

四、typedef关键字

五、函数指针数组


一、字符指针变量

1 初始化

//VS2022 x64
#include <stdio.h>
int main()
{char* p = 'w';	//字符指针变量char* pc = "abcdef";	//pc 里存放的是字符串首元素的地址printf("%s", pc);	//输出 abcdefreturn 0;
}

2 与字符串数组的区别

#include <stdio.h>
int main()
{char arr1[] = "abcd";char arr2[] = "abcd";char* pc1 = "abcd";char* pc2 = "abcd";if (arr1 == arr2)    //判断存储的地址是否一样printf("arr1 和 arr2 一样\n");elseprintf("arr1 和 arr2 不一样\n");if(pc1 == pc2)    //判断存储的地址是否一样printf("pc1 和 pc2 一样\n");elseprintf("pc1 和 pc2 不一样\n");return 0;
}//输出
//arr1 和 arr2 不一样
//pc1 和 pc2 一样

 


二、数组指针变量 

1 初始化

#include <stdio.h>
int	main()
{//类比一下//整型指针变量int a = 10;int* p1 = &a;	//指针类型:int*int arr[5] = { 0,1,2,3,4 };//整型指针变量int* p = arr;	//指针类型:int* 指向数组首元素地址//数组指针变量int(*p)[5] = &arr;	//指针类型:int(*)[5] 指向整个数组地址return 0;
}

2 二维数组传参本质

原来的格式

#include <stdio.h>
void func(int arr[3][3])
{for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){printf("%d ", arr[i][j]);}printf("\n");}
}int main()
{int arr[3][3] = { {1,2,3},{2,3,4},{3,4,5} };func(arr);	//传的是数组首元素地址return 0;
}

根据数组名是数组首元素的地址这个规则,二维数组的数组名表示的就是第一行的地址,是一维数组的地址。根据上面的例子,第一行的一维数组的类型就是 int[3] ,所以第一行的地址的类型就是数组指针类型 int(*)[3] 。那就意味着二维数组传参本质上也是传递了地址,传递的是第一行这个一维数组的地址,那么形参也是可以写成指针形式的。 

void func(int (*p)[3])
{for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){printf("%d ", p[i][j]);	//等同于*( *(p + i) + j)}printf("\n");}
}int main()
{int arr[3][3] = { {1,2,3},{2,3,4},{3,4,5} };func(arr);return 0;
}

三、函数指针变量

1 初始化

函数是有地址的,函数名就是函数的地址,当然也可以通过 &函数名 的方式获得函数的地址。

#include <stdio.h>
int Add(int a,int b)
{return a + b;
}int main()
{int a = 0;int b = 0;Add(a,b);int (*p1)(int, int) = &Add;int (*p2)(int,int) = Add;printf("%p\n", p1);printf("%p\n", p2);return 0;
}//输出
//00007FF6EA2413CA
//00007FF6EA2413CA

2 用法 

通过函数指针调用指针指向的函数

#include <stdio.h>
int Add(int a, int b)
{return a + b;
}int main()
{int a = 5;int b = 5;int (*p1)(int, int) = Add;printf("%d\n", p1(a, b));    //等同于Add(a, b)return 0;
}//输出
//10

四、typedef关键字

typedef 是用来类型重命名的,可以将复杂的类型,简单化

//将 unsigned int 重命名为 uint
typedef unsigned int uint;

但是对于数组指针和函数指针稍微有点区别:新的类型名必须在 * 的右边

//将 int(*)[5] 重命名为 pa_int
typedef int(*pa_int)[5];
//将 int(*)(int, int) 重命名为pf_int
typedef int(*pf_int)(int, int);

五、函数指针数组

存放指针的数组称为指针数组,存放函数指针的数组称为函数指针数组

int(*pf[3])(int, int);

pf 先和 [ ] 结合,说明 pf 是数组,数组的内容是 int (*)(int, int) 类型的函数指针。


完 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/328982.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

供应链投毒预警 | 开源供应链投毒202404月报发布(含投毒案例分析)

概述 悬镜供应链安全情报中心通过持续监测全网主流开源软件仓库&#xff0c;结合程序动静态分析方式对潜在风险的开源组件包进行动态跟踪和捕获&#xff0c;发现大量的开源组件恶意包投毒攻击事件。在2024年4月份&#xff0c;悬镜供应链安全情报中心在NPM官方仓库&#xff08;…

利用远程控制软件FinalShell远程连接虚拟机上的Linux系统(Windows)

一. VMware Workstation 安装CentOS Linux操作系统 传送门&#xff1a;VMware Workstation 安装CentOS Linux操作系统 1.右键打开终端 2.输入ifconfig 找到ens33对应 inet的id&#xff0c;这个就是虚拟机的ip地址图中所示为&#xff1a;192.168.5.128 3.打开finalshell 如…

YOLOv5改进 | Neck | 添加双向特征金字塔BiFPN【小白轻松上手 | 论文必备】

&#x1f680;&#x1f680;&#x1f680;本专栏所有的改进均可成功执行&#x1f680;&#x1f680;&#x1f680; 尽管Ultralytics 推出了最新版本的 YOLOv8 模型。但YOLOv5作为一个anchor base的目标检测的算法&#xff0c;YOLOv5可能比YOLOv8的效果更好。但是针对不同的数据…

抖店商品详情API接口(产品参数|详情图)

抖店商品详情API接口(产品参数|详情图) 参数仅供参考&#xff1a; {"code": 0,"msg": "调用成功","time": "1715763239","data": {"properties": [{"format": [{"message": [{&q…

Linux(九) 信号

目录 一、什么是信号 二、信号的种类 三、信号的产生 3.1 通过终端按键产生信号 Core Dump 核心转储 3.2 调用系统函数向进程发信号 3.3 由软件条件产生信号 3.4 硬件异常产生信号 四、信号的注册 五、信号的注销 六、信号的三种处理方式 七、信号的递达阻塞未决 八…

摸鱼大数据——大数据导论

大数据导论 1、概念 大数据时代: 万物皆数据 ​ 数据概念: 人类的行为及产生的事件的一种记录称之为数据 ​ 数据价值: 对数据的内容进行深入分析&#xff0c;可以更好的帮助了解事和物在现实世界的运行规律 2、大数据诞生 大数据的诞生: 跟随着互联网的发展的,当全球互联…

【面试干货】一个数组的倒序

【面试干货】一个数组的倒序 1、实现思想2、代码实现 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、实现思想 创建一个新的数组&#xff0c;然后将原数组的元素按相反的顺序复制到新数组中。 2、代码实现 package csdn;public class…

ssl证书价格一年多少钱?如何申请?

由于行业新规&#xff0c;现在阿里云、腾讯云等几乎所有平台都不再提供一年期免费证书&#xff0c;如果需要一年期证书则需要支付一定的费用。SSL证书的价格根据类型不同几十到几百上千不等。 一年期SSL证书申请通道https://www.joyssl.com/?nid16 一年期SSL证书申请流程&am…

13、24年--信息系统治理——IT审计

1、IT审计基础 1.1 IT审计定义 无重要的考点,自己读课本了解即可。 1.2 IT审计目的 1)IT审计的目的是指通过开展IT审计工作,了解组织IT系统与IT活动的总体状况,对组织是否实现IT目标进行审查和评价,充分识别与评估相关IT风险,提出评价意见及改进建议,促进组织实现IT目…

【网络安全】【Frida实战案例】某图xx付费功能逆向分析(一)

文章目录 一、目标应用二、环境三、步骤1、查看布局id2、用到的Log日志类信息3、尝试hook VIP判断方法 四、总结五、相关源码 1、【网络安全】【Frida实践案例】某图xx付费功能逆向分析&#xff08;一&#xff09; 2、【网络安全】【Frida实践案例】某图xx付费功能逆向分析&…

【多表查询】---------------------三大范式

1.笛卡尔积 #查询的是笛卡尔积 select * from tb_emp,tb_dept; #消除无效的笛卡尔积 select * from tb_emp,tb_dept where tb_emp.dept_id tb_dept.id; 2.内连接 外连接 内连接 内连接&#xff1a;交集 左外连接、右外连接 #隐式内连接 select tb_emp.name ,tb_dept.name…

TCP服务器实现将客服端发送的信息广播发送(使用内核链表管理客户端信息)

目录 1.服务器端实现思路 2.服务器端代码 3.客户端代码 4.内核链表代码 5.运行格式 一、服务器端 二、客户端 6.效果 1.服务器端实现思路 Tcp广播服务初始化 等待客户端连接 广播发送 2.服务器端代码 #include "list.h" #include <signal.h> #def…

如何看固态硬盘是否支持trim功能?固态硬盘开启trim数据还能恢复吗

随着科技的飞速发展&#xff0c;固态硬盘&#xff08;SSD&#xff09;已成为电脑存储的主流选择。相较于传统的机械硬盘&#xff0c;固态硬盘以其高速读写和优秀的耐用性赢得了广泛好评。而在固态硬盘的众多功能中&#xff0c;TRIM功能尤为关键&#xff0c;它能有效提升固态硬盘…

上传文件,服务器报500错误

项目场景&#xff1a; 今天项目上出现一个耗时比较长的问题&#xff0c;但是问题很简单&#xff0c;一开始没注意&#xff0c;导致耗时很久&#xff0c;到底是咋回事儿呢&#xff0c;请看下文~~ 问题描述 用户使用APP上传图片&#xff0c;出现 附件上传失败:服务器响应失败 的…

The 13th Shandong ICPC Provincial Collegiate Programming Contest

The 13th Shandong ICPC Provincial Collegiate Programming Contest The 13th Shandong ICPC Provincial Collegiate Programming Contest A. Orders 题意&#xff1a;有n个订单&#xff0c; 每日可生产k个产品&#xff0c;每个订单给出交付日和交付数量&#xff0c;是否能…

究极完整版!!Centos6.9安装最适配的python和yum,附带教大家如何写Centos6.9的yum.repos.d配置文件。亲测可行!

前言&#xff01; 这里我真是要被Centos6.9给坑惨了&#xff0c;最刚开始学习linux的时候并没有在意那么的&#xff0c;没有考虑到选版本问题&#xff0c;直到23年下半年&#xff0c;官方不维护Centos6.9了&#xff0c;基本上当时配置的文件和安装的依赖都用不了了&#xff0c…

OpenAI发布会最新消息!ChatGPT新功能发布!

关于即将发布的内容&#xff0c;OpenAI 官方帖子提供的唯一细节是&#xff0c;此次发布将更新 ChatGPT 及其最新模型 GPT-4。 OpenAI 员工程博文&#xff08;Bowen Cheng&#xff09;跟了个帖&#xff0c;「比 gpt-5 更酷」&#xff0c;不过又迅速删帖。 OpenAI 的葫芦里到底卖…

电商秒杀系统设计

业务流程 系统架构 系统挑战 高并发:秒杀活动会在短时间内吸引大量用户,系统需要能够处理高峰时期的大量并发请求 库存同步:在秒杀中,面临的一个严重系统挑战是如何确保在数以万计的用户同时抢购有限的商品时,如何正确、实时地扣减库存,以防止超卖现象。 防止恶意抢购和…

儿童护眼台灯哪个牌子好,适合儿童使用的护眼台灯推荐

护眼台灯在近几年成为家长和经常与电子设备打交道的人士中备受瞩目的家用电器。对于有孩子的家庭而言&#xff0c;它几乎成为了必备品&#xff0c;许多消费者已经对其有了一定的了解并进行了购买。然而&#xff0c;仍有部分家长对护眼台灯的效果和重要性缺乏充分认识&#xff0…

Dreamweaver 2021 for Mac 激活版:网页设计工具

在追求卓越的网页设计道路上&#xff0c;Dreamweaver 2021 for Mac无疑是您的梦幻之选。这款专为Mac用户打造的网页设计工具&#xff0c;集强大的功能与出色的用户体验于一身。 Dreamweaver 2021支持多种网页标准和技术&#xff0c;让您能够轻松创建符合现代网页设计的作品。其…