对c语言中的指针进行深入全面的解析

1.普通的指针:

实际上指针就是存放地址的变量,eg:

int a=10;

int *p=&a;

拆分一下int *中的*说明p是一个指针,int是它所指向的类型;


2.字符串指针和字符串数组

char*str1="abcd";

先看这一个,这个就是一个字符串指针,它是一个常量指针,在c中才能这么定义,如果是cpp中,

它会强制要求你用 const char* str1="abcd";

这个指针是让"abcd"这个字符串的地址赋予给了str1,而它们的地址是处于静态内存区的,你是无法进行修改的。

字符串数组,eg

char str[20]="abcd";

这个就是生成了一个空间用于存放这个字符串,这个空间中的内容是可以修改的,所以一般的str函数操作的字符串都是在操作这一个。


3.指针与数组相互联系:

int arr[10]={0};

int *p=arr; 

这里的arr指的是arr数组的首元素的地址 既为arr[0]的地址;

&arr则指的是整个数组,让我们验证一下这件事:

从16进制的转换可以得知,这里跳过了40个字节,也就是10个int,说明&arr确实指向的是arr这整一个数组;说到这里,让我们拓展一下,sizeof中出现arr时,代表的也是整一个数组,

             int sz = sizeof(arr) / sizeof(arr[0]);

所以我们总是会使用这种方式去求取整型数组中元素的个数;总结一下:

只有在sizeof(arr)和&arr时arr代表的是整个数组,否则都是数组首元素的地址;

这个在二维数组也是成立的,让我们来证明这件事。eg:

1:

跳过了20个字节,也就是5个int;

2:

int arr[3][5]={0};

int (*pf)[5]=arr;这里需要使用(数组指针才能够接受它的地址)


4.数组指针,指针数组等的讲解

char* arr[10]={0};

这个就是一个指针数组(也就是存放指针的数组),char* 代表了是一个char类型的指针,[10]说明了是一个数组;为什么不是数组指针呢?因为数组指针是长这样的 char (*arr)[10](一般是用于处理二维数组比较常用);上面那个是先跟数组组合的,说明是一个数组。

这里附上指针数组使用的例子,数组指针容易错误使用的例子和正确使用的例子。

1.指针数组的使用例子

打印的那个也可以换成arr[j][i]也没有关系,相当于模拟了一个二维数组的效果;

2.数组指针的错误使用

3.数组指针的正确使用例子


5.函数指针

5.1简单介绍

void add(int a,int b){

return a+b;

}

int (*pf)(int a, int b)=add;

这里相当于定义了一个函数指针,让add函数的首地址赋值给了pf,(*pf)()这个格式说明了是一个函数指针,但是有一点要注意的就是在调用的时候,可以不用解引用符号,pf(2,3)即可,为什么呢?因为你没发现函数在调用的时候也是add(2,3)吗,但是如果为了思维上更严谨,你当然也可以加

既 (*pf)(2,3)注意要用括号;

5.2函数指针在函数声明方面的引用

void (*(*pf)(int a,void (*)(int a)))(int a)

这个是个函数指针,怎么看呢?

A=(*pf)(int a,void (*)(int a))

首先把 void(*A)()

这样你是不是就看出来了呢

 怎么理解这件事情呢?请看下面

typedef void(*)(int a) pf_t 这样重命名是错误的,要用下面的方式

typedef void(*pf_t)(int a); 既把void(*)(int a) 简化为pf_t

pf_t (pf(int a,pf_t)

与 int add(int a, int b)这样的函数声明是不是就能联系上了呢?

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

[vulnhub] Hackademic.RTB1

第一次打靶机,思路看的红队笔记 https://www.vulnhub.com/entry/hackademic-rtb1,17/ 环境:kali Linux - 192.168.75.131,靶机 - 192.168.75.132 主机发现和端口扫描 扫描整个网络有哪台机子在线,不进行端口扫描 nmap -sP 192.16…

关于API概念:连接数字世界的桥梁

在数字化时代,信息和数据的流动是构建现代应用程序的基础。API(应用程序编程接口)作为连接不同软件和服务的桥梁,正逐渐成为现代技术架构中不可或缺的一部分。本文将探讨API的概念、重要性以及它如何塑造我们的数字生活。 什么是A…

解决Echarts:宽度100%,渲染的宽度却是100px

为什么我们宽度设置了100%&#xff0c;结果变为了100px&#xff1f; 源码这里没有获取到clientWidth&#xff0c;会将设置的width:100%转换称100px 解决办法&#xff1a; <div ref"numberPieRef"></div>let numberPieRef ref(null); let myChart nu…

基于二自由度汽车模型的汽车质心侧偏角估计

一、质心侧偏角介绍 在车辆坐标系中&#xff0c;质心侧偏角通常定义为质心速度方向与车辆前进方向的夹角。如下图所示&#xff0c;u为车辆前进方向&#xff0c;v为质心速度方向&#xff0c;u和v之间的夹角便是质心侧偏角。 质心侧偏角的作用有如下三点&#xff1a; 1、稳定性…

深度学习之表示学习 - 贪心逐层无监督预训练篇

引言 在人工智能的浩瀚星空中&#xff0c;深度学习以其强大的数据处理与模式识别能力&#xff0c;成为了一颗璀璨的明星。而表示学习&#xff0c;作为深度学习的核心基石之一&#xff0c;正引领着这一领域不断突破边界。表示学习旨在将原始数据转换为更加抽象、更有意义的特征…

【51实物与仿真】基于51单片机设计的波形/函数发生器(正弦波、锯齿波、三角波、矩形波,设定频率步进值,改变振幅,LCD显示)——文末完整资料链接

基于51单片机设计的波形函数发生器 演示视频: 功能简介: 1.本设计基于STC89C51/52(与AT89S51/52、AT89C51/52通用,可任选)单片机。 2.LCD1602液晶显示波形种类和频率值(10-100HZ)。 3.按键设置波形种类和设定频率步进值。 4.电位器器改变振幅(0V-3.5V稳定)。 5…

苹果AI手机遇阻,国产手机找到超车机遇

行至九月&#xff0c;2024年&#xff0c;这个所谓AI手机的元年&#xff0c;已经走过近三个季度了。 市场最为期待的AI手机机型也基本都发布了。9月20日&#xff0c;首款搭载Apple Intelligence功能的苹果新品iPhone16正式发售。或许是为了进一步扩大销售&#xff0c;今年天猫A…

html+css(如何用css做出京东页面,静态版)

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>京东</title><link rel"stylesheet&q…

OmniPeek 空口抓包软件安装指导

OmniPeek 空口抓包软件安装指导 1 双击omnp75安装包---Unzip解压缩 生成install包 2 进入install文件夹点击setup开始进入安装界面 3 点击install Omnipeek 4 点击next,勾选手动安装

基于微信小程序的竞赛答题小程序开发笔记(一)

开发背景调研 中小学学科答题小程序&#xff0c;适合各中小学校方&#xff0c;老师或者家长。通过互动和参与式学习&#xff0c;小程序能够通过游戏化元素提升学习的积极性和参与度&#xff0c;从而提升学习效率&#xff0c;促进学生自主学习 功能规划 分类题库&#xff1a;…

①大缓存ModbusRTU485数据集中采集器寄存器线圈重映射从站并发采集Modbus 串口RS485 转 RS485

大缓存ModbusRTU485数据集中采集器寄存器线圈重映射从站并发采集https://item.taobao.com/item.htm?ftt&id811821574300 产品型号&#xff1a; 一分一路 MS-A1-C011 一分2路 MS-A1-C021 一分4路 MS-A1-C041 一分7路 MS-A1-C071 一般技术规格 1.串口 MS-A1…

扩大产品库存怎么破?手把手教你,全开源哦!

要在产品上扩大库存&#xff1f;&#xff01;这太常见了&#xff0c;短视频时代&#xff0c;有大量东西要储存&#xff1a;视频、音频、文件等。 提到外扩&#xff0c;就不得不提到编写各种驱动&#xff0c;还有Flash替换。。。又是落发时刻啊&#xff01; 来吧&#xff01;也…

【鸿蒙HarmonyOS NEXT】用户首选项Preference存储数据

【鸿蒙HarmonyOS NEXT】数据存储之用户首选项Preference 一、环境说明二、Preference运作机制三、示例代码加以说明四、小结 一、环境说明 DevEco Studio 版本&#xff1a; API版本&#xff1a;以12为主 二、Preference运作机制 应用场景&#xff1a; 用户首选项为应用提…

从零开始之AI面试小程序

从零开始之AI面试小程序 文章目录 从零开始之AI面试小程序前言一、工具列表二、部署流程1. VMWare安装2. Centos安装3. Centos环境配置3.1. 更改子网IP3.2. 配置静态IP地址 4. Docker和Docker Compose安装5. Docker镜像加速源配置6. 部署中间件6.1. MySQL部署6.2. Redis部署 7.…

专属文生图助手——SD3+ComfyUI文生图部署步骤

SD3ComfyUI文生图部署步骤 我们使用DAMODEL来实现文生图的部署。 根据提供的操作步骤与代码段落&#xff0c;本文旨在介绍如何下载并部署 Stable Diffusion 3 模型&#xff0c;并通过 ComfyUI 架构实现基于 Web 界面的图像生成应用。本文将剖析各个步骤&#xff0c;并详细解释…

AOT源码解析4.1-model主体解析

1 输入数据 VOS的数据集处理操作可见数据集操作&#xff0c;这里是进行数据集提取完毕后的操作。 图2&#xff1a;如图所示&#xff0c;使用datasets提取出数据之后&#xff0c;在模型训练阶段对数据做图中操作。即&#xff1a;将batch_size大小的ref_imgs、prev_imgs&#x…

IDEA 关闭自动补全功能(最新版本)

文章目录 一、前言二、关闭自动补全三、最终效果 一、前言 在最新的 IDEA 中发布了自动补全功能&#xff0c;当你输入代码时&#xff0c;IDEA 会自动显示你可能想输入的代码&#xff0c;减少手动输入的工作量&#xff0c;它会根据上下文提供正确的选项&#xff0c;提高代码的准…

基于C#+SQL Server(CS界面)学生选课及成绩查询管理系统

学生选课及成绩查询管理系统的设计与开发 1、项目背景 学生选课及成绩查询系统是一个学校不可缺少的部分&#xff0c;传统的人工管理档案的方式存在着很多的缺点&#xff0c;如&#xff1a;效率低、保密性差等&#xff0c;所以开发一套综合教务系统管理软件很有必要&#xff…

对onlyoffice进行定制化开发

基于onlyoffice8.0源码&#xff0c;进行二次开发&#xff0c;可实现包括但不限于以下的功能 1、内容控件的插入 2、内容空间的批量替换 3、插入文本 4、插入图片 5、添加&#xff0c;去除水印 6、修改同时在线人数限制 7、内容域的删除 8、页面UI的定制化 9、新增插件开发 10、…

华为全联接大会HUAWEI Connect 2024印象(四):上海大学的脑机接口演示

在HC上&#xff0c;除了华为自己的技术展示&#xff0c;也包括一些合作伙伴的展示。一个印象比较深的是上海大学的韶脑传感脑机接口。 上海大学现场准备了一个可以被脑机接口控制的电动轮椅供参观者现场体验。体验者需要先戴上一个头套&#xff0c;上面有各种传感器。据上海大…