C-认识指针

news2024/12/23 16:28:12

认识指针

内容来自《深入理解C指针》

声明指针
在数据类型后面跟上星号*,如下的声明都是等价的

int* pi;
int * pi;
int *pi;
int*pi;

阅读声明
如下:

const int *pci;

1.pci是一个变量 const int *pci;
2.pci是一个指针变量 const int *pci;
3.pci是一个指向整数的指针变量 const int *pci;
4.pci是一个指向整数常量的指针变量 const int *pci;

地址操作符
地址操作符&会返回操作数的地址

int num;
int *pi = #

打印指针的值

int num = 0;
int *pi = #
printf("Address of num: %p Value: %d\n", &num, num);
printf("Address of pi: %p Value: %p\n", &pi, pi);

输出可能如下:

Address of num: 0x7ffeefbff51c Value: 0
Address of pi: 0x7ffeefbff510 Value: 0x7ffeefbff51c

在不同的平台上用一致的方式显示指针的值比较困难。一种方法是把指针转换为void指针,然后使用%p格式说明符来显示:

printf("Value of pi: %p\n", (void *)pi);

间接引用操作符
间接引用操作符(*)返回指针变量指向的值

间接引用操作符
NULL
NULL被赋值给指针就意味着指针不指向任何东西
NULL宏是强制类型转换为void指针的整数常量0,在很多库中的定义如下:

#define NULL ((void *)0)

测试指针是否设置为NULL。如果pi被赋值为NULL值,那就会被解释为二进制0

pi = NULL;
if (pi) {
    printf("pi is null\n");
} else {
    printf("pi is not null\n");
}

或者

if (pi == NULL) {}
if (pi != NULL) {}

void指针

void指针是通用指针,用来存放任何数据类型的引用

void *pv;

任何指针都可以被赋给void指针,它可以被转换回原来的指针类型,指针的值和原指针的值是相等的

int num = 100;
int *pi = #
printf("Value of pi: %p\n", pi);
void *pv = pi;
pi = (int *)pv;
printf("Value of pi: %p\n", pi);

输出如下,显示指针地址是一样的:

Value of pi: 0x7ffeefbff51c
Value of pi: 0x7ffeefbff51c

void指针只能用做数据指针,而不能用做函数指针

sizeof操作符可以用在void指针上

size_t size = sizeof(void *);

size_t 是用来表示长度的数据类型

全局和静态指针

指针被声明为全局或静态,就会在程序启动时被初始化为NULL

int *globalpi;

void foo() {
    static int *staticpi;
}

int main(int argc, const char * argv[]) {
    
    return 0;
}

全局和静态指针
size_t

size_t类型表示C中任何对象所能达到的最大长度。是无符号整型,负数在这里没有意义
size_t用做sizeof操作符的返回值类型,同时也是很多函数的参数类型,如mallocstrlen
size_t的典型定义如下:
size_t

size_t推荐的格式说明符是%zu

size_t sizet = 5;
printf("%d\n", sizet);
printf("%zu\n", sizet);

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

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

相关文章

FMC篇-SDRAM(IS42S16400J)

IS42S16400J 这个东西太常见啦,长方形的。不会过多解释,详细请阅读它的数据手册。 IS42S16400J是一种高速同步动态随机存储器(SDRAM),64Mb的存储容量,采用4个bank,每个bank大小为16Mb,总线宽度为16位&…

eDiary-白日梦电子记事本基本使用说明【记事本导出和导入方法、本地数据迁移方法、记录工作日报、日历代办等】

文章目录 说明笔记导出与导入导出导入 本地数据迁移及备份本地备份说明恢复 记录工作日报记录今天发生美事等日历代办 说明 因为公司大佬分享资料,需要用到白日梦这个电子记事本,所以才了解到这个软件,体量小,功能高级&#xff0…

图数据库 NebulaGraph 的内存管理实践之 Memory Tracker

数据库的内存管理是数据库内核设计中的重要模块,内存的可度量、可管控是数据库稳定性的重要保障。同样的,内存管理对图数据库 NebulaGraph 也至关重要。 图数据库的多度关联查询特性,往往使图数据库执行层对内存的需求量巨大。本文主要介绍 …

Amazon 一周回顾 – 2022 年 7 月 18 日

上周,Amazon 峰会(纽约)在贾维茨中心线下举办,有数千名与会者以及 100 多家赞助商和合作伙伴参加。在主题演讲中,Amazon 首席开发人员倡导者 Martin Beeby 谈到了云基础设施的创新如何帮助客户适应挑战并抓住新的机遇。…

开源之夏 2023 | 欢迎参加openEuler A-Tune SIG和Base-service SIG开发任务

开源之夏是中国科学院软件研究所联合openEuler发起的开源软件供应链点亮计划系列暑期活动,旨在鼓励在校学生积极参与开源软件的开发维护,促进优秀开源软件社区的蓬勃发展。活动联合各大开源社区,针对重要开源软件的开发与维护提供项目&#x…

linux Fd以及重定向讲解

感谢你的阅读,是对我最大的鼓励!!!! 目录 fd理解 文件操作重定向 让我们回顾C语言文件操作 首选我们要知道2个知识点: 额外知识点 如何理解一切皆文件呢? 当父进程fork创建子进程是否创建…

移动出行下半场,T3出行做起“加减法”

五一小长假外出聚餐时,在T3出行打了一辆网约车,车厢上居然印了《灌篮高手》的动漫角色。 松果财经了解到,这是T3出行在上海、深圳、广州、成都、重庆及武汉等六大城市与《灌篮高手》展开的合作,大概有数百辆定制网约车印上了《灌篮…

现在Java和大数据开发还能学来找工作吗?

卷是必然的,不止java和大数据,也不止IT这个行业~ 这两个方向其实都是不错的方向,java虽然卷,但是技能在手也不怕。大数据的发展前景也是不容小觑的。关键就在于你未来想发展的方向以及个人的兴趣 首先先给你吃一颗定心丸&#x…

HTML零基础快速入门(详细教程)

1&#xff0c;HTML代码特点 <html><head></head><body>hello world!</body> </html>HTML代码有以下特点&#xff1a; html代码是通过标签来组织的&#xff0c;而标签是由尖括号< >组织的&#xff0c;也可被叫作元素&#xff08;ele…

SpringCloudAlibaba项目打成war后无法注册到Nacos,无法连接到Nacos Server

SpringCloudAlibaba项目打成war后无法注册到Nacos,无法连接到Nacos Server 背景原因解决重新打包、部署&#xff1a;正常&#xff01; 参考&#xff1a;https://www.jb51.net/article/233940.htm 背景 正常jar(使用内嵌tomcat)包是可以连接并注册到Nacos的&#xff0c;但是将…

uniapp源码编译打包App上架发布详细教程

基础配置 App打包&#xff08;使用Hbuilder进行App打包&#xff09; 视频教程 视频地址&#xff1a; https://www.bilibili.com/video/BV1Kg411g7cb 一、修改接口地址 1.打开uni-app下config/app.js修改接口地址&#xff0c;将下图红框中的地址修改成您的域名 二、配置参…

研发工程师玩转Kubernetes——安装microk8s和Docker

《研发工程师玩转Kubernetes》将立足于实操&#xff0c;试图由浅入深探索Kubernetes世界。于是在技术选型和内容上也将由易到难&#xff0c;由简单到复杂。 为了降低进入的门槛&#xff0c;我们前期将不考虑多实例&#xff08;机器&#xff09;的部署&#xff0c;而采用单机部署…

ThreadLocal 的原理讲述 + 基于ThreadLocal实现MVC中的M层的事务控制

ThreadLocal 的原理讲述 基于ThreadLocal实现MVC中的M层的事务控制 文章目录 ThreadLocal 的原理讲述 基于ThreadLocal实现MVC中的M层的事务控制每博一文案1. ThreadLocal 给概述2. 抛砖引玉——>ThreadLocal3. ThreadLocal 的模拟编写4. ThreadLocal 源码原理分析5. Thre…

云厂商降价潮背后:来中小企业战场「拼刺刀」

如果说过往云厂商的降价打响的是从C端进军B端的营销战&#xff0c;那么在这一轮降价潮背后&#xff0c;对应的则是云厂商从大型KA客户向中小企业进军的信号&#xff0c;强被集成&#xff0c;强获客。 云厂商又一轮降价潮袭来。 5月16日&#xff0c;移动云宣布部分产品线最高降…

技术探秘:揭秘Bean Factory与FactoryBean的区别!

大家好&#xff0c;我是小米&#xff0c;一个热衷于技术分享的29岁小编。今天&#xff0c;我们来聊一聊在Spring框架中常用的两个概念&#xff1a;beanFactory和FactoryBean。它们虽然看似相似&#xff0c;但实际上有着不同的用途和作用。让我们一起来揭开它们的神秘面纱吧&…

SaleSmartly聊天机器人如何帮助您的电商业务(二)

上文为大家介绍了两类机遇SaleSmartly&#xff08;ss客服)强大的自动化编辑器构建的两类聊天机器人&#xff0c;接下来继续为大家介绍两种类型的聊天机器人。SaleSmartly&#xff08;ss客服&#xff09;可构建的聊天机器人还有以下两类&#xff1a; 3. NLP聊天机器人 SaleSma…

Datax+Datax-web2.1实现MySQL数据库数据同步(二)

目录 流程1、创建项目2、创建数据源3、创建任务模板4、构建任务5、执行同步任务 安装文档参考&#xff1a;https://blog.csdn.net/zhanremo3062/article/details/130728287 流程 这里以2.1.2版本为例&#xff0c;datax-web使用起来还是很顺滑的&#xff0c;操作流程跟其他任务…

结合自由能计算

结合自由能计算 打分函数 背景 打分函数广泛应用于基于结构的计算辅助药物设计&#xff0c;其通过定量化评估药-靶的相互作用为药物研发中的药效评估提供理论依据&#xff0c;提高活性化合物甄别的效率。定量评估药物与靶标蛋白的相互作用通常分为两步&#xff0c;一步是对接…

Android之 fragment页面碎片详解

一 简介 1.1 Fragment是Android3.0新增的概念&#xff0c;中文意思是“碎片”&#xff0c;它与Activity非常相似&#xff0c;是用来描述一些行为或者一部分用户界面 1.2 可以在一个单独的Activity中建立多个Fragment面板&#xff0c;也可以在多个Activity中复用Fragment 1.3…

【OpenCV】C++红绿灯轮廓识别+ROS话题实现

目录 前言 一、背景知识 Opencv轮廓检测 ROS相关知识 二、环境依赖 三、具体实现 Step1&#xff1a;初始化ROS&#xff0c;订阅话题 Step2&#xff1a;接收话题&#xff0c;进入回调 1. 帧处理 2. 膨胀腐蚀处理 Step3&#xff1a;红绿特征处理 1. 提取绘制轮廓 2…