大话C语言:第29篇 指针

1 指针概念

  • 指针:地址的变量化形式,其存储的是内存中某个存储单元的地址。它是地址的数值表示。

  • 指针变量:一种特殊的变量,它专门用于存放变量的地址(即指针)。

注意,指针和指针变量的区别:

  • 指针本身是一个地址,这个地址指向内存中的一个存储单元。它只是一个内存地址的抽象表示,没有存储空间来存储值,只是指向一个存储位置。

  • 指针变量则是一个变量,用于存储指针的值,即内存地址。指针变量有具体的存储空间,可以存储一个地址值。在程序中,可以通过操作指针变量来间接地访问和操作它所指向的内存地址中的数据。

2 指针变量的定义

语法格式:

类型 变量;
类型 * 指针变量 = &变量;

其中,

  • & 叫取地址,返回操作数的内存地

  • *叫解引用,指操作指针所指向的变量的值

  • 在定义变量时,* 号表示所声明的变量为指针类型。指针变量要保存某个变量的地址,指针变量的类型比这个变量的类型多一个*

  • 在指针使用时,* 号表示操作指针所指向的内存空间

注意,

  • 指针也是一种数据类型,指针变量也是一种变量

  • 指针变量指向谁,就把谁的地址赋值给指针变量

代码示例:

#include <stdio.h>int main() 
{// 定义一个int类型的变量,同时赋值为10int a = 10;// 打印变量的地址printf("&a = %p\n", &a);// 定义一个指针变量,int *保存int的地址// int *代表是一种数据类型,int *指针类型,p才是变量名int* p;// 指针指向谁,就把谁的地址赋值给这个指针变量p = &a;// 打印p, *p, p指向了a的地址,*p就是a的值printf("p = %p, *p = %d\n", p, *p);return 0;
}

关于指针大小,可以通过,sizeof运算符获取,例如,

#include <stdio.h>int main(int argc, char *argv[])
{char *p1;short int *p2;int *p3;long int *p4;float *p5;double *p6;printf("%d\n",sizeof(p1));printf("%d\n",sizeof(p2));printf("%d\n",sizeof(p3));printf("%d\n",sizeof(p4));printf("%d\n",sizeof(p5));printf("%d\n",sizeof(p6));return 0;
}

注意

  • 在 32 位系统下,所有类型的指针都是 4 个字节。

  • 在 64 位系统下,所有类型的指针都是 8个字节。

3 指针分类

按照其指向的数据类型分类,指针分类包括:

  • 字符指针,例如

// 定义了一个字符指针变量,只能存放字符型数据的地址编号
char ch;
char *p = &ch;
  • 短整型指针,例如

// 定义了一个短整型指针变量,只能存放短整型数据的地址编号
short num;
short *p = &num;
  • 整型指针,例如

// 定义了一个整型指针变量,只能存放整型数据的地址编号
int num;
int *p = &num;
  • 长整型指针,例如

// 定义了一个长整型指针变量,只能存放长整型数据的地址编号
long num;
long *p = &num;
  • 单精度浮点型指针,例如

// 定义了一个单精度浮点型指针变量,只能存放单精度浮点型数据的地址编号
float num;
float *p = &num;
  • 双精度浮点型指针,例如

// 定义了一个双精度浮点型指针变量,只能存放双精度浮点型数据的地址编号
double num;
double *p = &num;
  • 函数指针,例如

int add(int a, int b) 
{  return a + b;  
}int (*func_ptr)(int, int);
  • 结构体指针,例如

// 定义结构体类型  
struct Student 
{  char name[50];  int age;  float score;  
};  // 定义结构体指针  
struct Student *ptr;
  • 指针的指针,例如

// 定义一个整型指针  
int *ptr;      
// 定义一个指向整型指针的指针(二级指针)
int **pptr;     
  • 数组指针,例如

// 指向包含5个整数的数组的指针  
int (*int_array_ptr)[5]; // 指向任意长度双精度浮点数组的指针  
double (*double_array_ptr)[]; // 指向包含10个字符的数组的指针
char (*char_array_ptr)[10]; 
  • 通用指针,是一种特殊的指针类型,用void*来修饰。它可以指向任何类型的数据,包括结构体、数组、函数等,因此也被称为无类型指针。

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

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

相关文章

【Linux】线程池|单例模式|STL、智能指针线程安全|读者写者问题

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;理解【Linux】线程池|单例模式|STL、智能指针线程安全|读者写者问题。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会…

2024 年 07 月编程语言排行榜|Rust 即将进入前十

TIOBE 2024 年 07 月份的编程语言排行榜已经公布&#xff0c;官方的标题是&#xff1a;Rust 即将进入前十&#xff08;Rust is preparing itself for the top 10&#xff09;。 Python 继续保持第一&#xff0c;而 C 超越 C 升至第二&#xff1a; 在 TIOBE 7 月编程语言排行榜…

springboot项目怎么样排除自带tomcat容器使用宝蓝德bes web中间件?

前言&#xff1a; 由于Spring Boot 1.x和2.x不兼容&#xff0c;BES提供了对应的Spring Boot Starter版本。 bes‑lite‑spring‑boot‑1.x‑starter.jar&#xff0c;适用于Spring Boot 1.x的版本。 bes‑lite‑spring‑boot‑2.x‑starter…

深度解析:当下流行的人工智能大模型生成逻辑

在过去的几年里&#xff0c;人工智能领域经历了前所未有的革新&#xff0c;其中最引人注目的就是大规模预训练模型的崛起。这些模型&#xff0c;如GPT系列、BERT、T5、DALLE和CLIP等&#xff0c;凭借其强大的语言理解和生成能力&#xff0c;已经在自然语言处理&#xff08;NLP&…

Dockerfile打包部署常用操作

文章目录 1、Dockerfile部署java程序&#xff08;jar包&#xff09;1.1、创建Dockerfile1.2、将Dockerfile和要上传的jar包放到一个目录下&#xff0c;构建镜像1.3、创建启动容器 2、Dockerfile部署vue2.1、创建dockerfile文件2.2、将打包的dist文件放到dockerfile同文件目录下…

《初级C++》(一)

初级C&#xff08;一&#xff09; 1: C参考⽂档2&#xff1a;C创建与实现创建C的第一套程序命名空间的理解空间命名的实现C输⼊&输出缺省参数 1: C参考⽂档 https://legacy.cplusplus.com/reference/ 《非官方》 https://zh.cppreference.com/w/cpp 《官方中文版》 https:/…

vue3 学习 之 vue3使用

为什么要学习vue3呢&#xff1f; vue2.0也是现在比较稳定的一个版本&#xff0c;社区还有周边都比较完善&#xff0c;如果不是非必要其实我们不需要着急直接升级到vue3.0; 那为什么还要学习&#xff0c;主要是还是为了了解一下vue3.0相较于2.0的优势和特性&#xff0c;方便之后…

Unity实现安卓App预览图片、Pdf文件和视频的一种解决方案

一、问题背景 最近在开发app项目&#xff0c;其中有个需求就是需要在app软件内显示图片、pdf和视频&#xff0c;一开始想的解决方案是分开实现&#xff0c;也就是用Image组件显示图片&#xff0c;找一个加载pdf的插件和播放视频的插件&#xff0c;转念一想觉得太麻烦了&#x…

浏览器控制台打印日志的方法汇总

目录 console.table用法 打印数组 打印对象 打印数组对象 打印数组对象里的指定字段 console.count用法 不传参打印 传参打印 console.warn用法 打印文本 打印对象 console.error用法 打印文本 打印对象 console.assert用法 打印文本 打印对象 consol…

AI视频创作一条龙!达摩院“寻光”平台炸场WAIC,突破可控编辑难题

卡奥斯智能交互引擎是卡奥斯基于海尔近40年工业生产经验积累和卡奥斯7年工业互联网平台建设的最佳实践&#xff0c;基于大语言模型和RAG技术&#xff0c;集合海量工业领域生态资源方优质产品和知识服务&#xff0c;旨在通过智能搜索、连续交互&#xff0c;实时生成个性化的内容…

开源模型应用落地-FastAPI-助力模型交互-进阶篇(一)

一、前言 FastAPI 的高级用法可以为开发人员带来许多好处。它能帮助实现更复杂的路由逻辑和参数处理&#xff0c;使应用程序能够处理各种不同的请求场景&#xff0c;提高应用程序的灵活性和可扩展性。 在数据验证和转换方面&#xff0c;高级用法提供了更精细和准确的控制&#…

Leetcode 3209. Number of Subarrays With AND Value of K

Leetcode 3209. Number of Subarrays With AND Value of K 1. 解题思路2. 代码实现 题目链接&#xff1a;3209. Number of Subarrays With AND Value of K 1. 解题思路 这一题的话整体上是一个滑动窗口的思路&#xff0c;我们维护一个滑动窗口&#xff0c;确保其每一个窗口都…

『大模型笔记』你需要的不是智能体,而是一个适合 AI 的工作流

你需要的不是智能体,而是一个适合 AI 的工作流 文章目录 一. 你需要的不是智能体,而是一个适合 AI 的工作流1. 不要将 AI 的解决方案局限在人类现有的解决方案上2. 不必完全依赖 AI 做决策,而是让 AI 辅助做决策或者做简单的决策3. 结合不同领域的 AI 模型或者工具,设计合适…

RedHat运维-Linux文本操作基础-SED基础

1. 打印出/etc/passwd的第12行的命令为_______________________________________&#xff1b; 2. 打印出/etc/passwd的第12到第18行的命令为________________________________________&#xff1b; 3. 打印出/etc/passwd的总行数的命令为_____________________________________…

低代码研发项目管理流程优化:提效与创新的双重驱动

随着信息技术的迅猛发展&#xff0c;软件项目的规模和复杂度日益增加&#xff0c;传统的软件开发方式已经难以满足快速迭代和高效交付的需求。在这一背景下&#xff0c;低代码平台应运而生&#xff0c;以其高效、灵活、易用的特点&#xff0c;迅速成为软件行业的新宠。然而&…

运行pip出现UnicodeDecodeError: ‘ascii‘ codec can‘t decode

错误: UnicodeDecodeError: ascii codec cant decode byte 0xe2 in position 1025: ordinal not in range(128) ERROR: Exception: Traceback (most recent call last):File "/usr/local/lib/python3.6/dist-packages/pip/_internal/cli/base_command.py", line 22…

C语言下结构体、共用体、枚举类型的讲解

主要内容 结构体结构体数组结构体指针包含结构体的结构链表链表相关操作共用体枚举类型 结构体 结构体的类型的概念 结构体实现步骤 结构体变量的声明 struct struct 结构体名{ 数据类型 成员名1; 数据类型 成员名2; ..…

PostgreSQL的pg_bulkload工具

PostgreSQL的pg_bulkload工具 pg_bulkload 是一个针对 PostgreSQL 提供高性能批量数据加载的工具。相较于内置的 COPY 命令&#xff0c;pg_bulkload 更加灵活并且在许多情况下性能更高。它支持数据的强制加载、数据过滤、数据转换以及错误处理等多种功能&#xff0c;非常适合需…

qt hasPendingDatagrams() 函数

hasPendingDatagrams 是 Qt 框架中 QUdpSocket 类的一个方法&#xff0c;用于检查是否有待处理的数据报到达。在 UDP 通信中&#xff0c;数据以数据报的形式发送&#xff0c;而 QUdpSocket 类提供了用于接收和处理这些数据报的功能。 功能描述 hasPendingDatagrams() 方法用于…

从数据到洞察:DataOps加速AI模型开发的秘密实践大公开!

作者 | 代立冬&#xff0c;白鲸开源科技联合创始人&CTO 引言 在AI驱动的商业世界中&#xff0c;DataOps作为连接数据与洞察的桥梁&#xff0c;正迅速成为企业数据战略的核心。 在WOT全球技术创新大会2024北京站&#xff0c;白鲸开源联合创始人&CTO 代立冬 在「大数据…