大话C语言:第29篇 指针

news2024/11/16 5:48:24

1 指针概念

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

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

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

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

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

2 指针变量的定义

语法格式:

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

其中,

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

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

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

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

注意,

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

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

代码示例:

#include <stdio.h>

int main() 
{
    // 定义一个int类型的变量,同时赋值为10
    int 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.coloradmin.cn/o/1909557.html

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

相关文章

uniapp+uview实现手机端上传照片带水印(保姆级全过程)

目录 前言&#xff1a;实现思路 步骤一、在界面使用uview的u-upload组件、放置canvas标签 步骤二、在afterRead方法中获取照片url&#xff0c;并创建画布生成水印&#xff0c;再将生成水印的照片上传到服务器 1、afterRead方法 2、照片加水印的方法 3、上传照片至服务器 …

项目管理:这样制定计划,让你事半功倍

在项目管理中&#xff0c;制定计划是成功的关键&#xff0c;一个完善的计划不仅能够明确项目的方向和目标&#xff0c;还能为团队成员提供清晰的行动指南。 制定计划的四大要素——做什么、怎么做、何时做、谁来做&#xff0c;为这一过程提供了坚实的框架。而甘特图作为一种直观…

OS Copilot:新手测评体验

文章目录 前言一、OS Copilot&#xff08;阿里云操作系统智能助手&#xff09;简介二、测评体验总结OS Copilot 产品体验评测OS Copilot 产品功能反馈 前言 本文简单分享一下自己使用OS Copilot测评体验。 一、OS Copilot&#xff08;阿里云操作系统智能助手&#xff09;简介 …

普通人必看!AI绘画商业变现全攻略(附教程)

大部分的设计师除了主业以外&#xff0c;都会利用空余时间去接单做副业。 单子包括但不限于产品/品牌LOGO、电商产品图设计、海报、室内设计图等等&#xff0c;单价在几十到上千不等 引起了我的思考&#xff0c;我们普通人有没有机会&#xff0c;也能像他们一样去接单赚钱吗&a…

挖K脚本检测指南

免责声明:本文仅做分享... 目录 挖K样本-Win&Linux-危害&定性 Linux-Web 安全漏洞导致挖K事件 Windows-系统口令爆破导致挖K事件 --怎么被挖K了??? 已经取得了权限. 挖K样本-Win&Linux-危害&定性 危害&#xff1a;CPU 拉满&#xff0c;网络阻塞&…

Spring最早的源码

地址&#xff1a;Spring最早的源码

Uniapp组件使用的详细步骤

官方文档&#xff1a;uni-app官网 (dcloud.net.cn) 一般用到的组件都在这里&#xff1a; 看介绍里面的注意事项&#xff0c;有注意的地方认真查看&#xff0c;使用的时候例如&#xff0c;以下示例日历&#xff0c;把代码粘贴到你的文件里&#xff0c;然后下载组件 1&#xff…

商家转账到零钱分销返佣场景驳回处理办法

在处理商家转账到零钱分销返佣场景被驳回的问题时&#xff0c;商家需要了解驳回的原因&#xff0c;并采取相应的措施来解决这些问题。下面将详细介绍几种常见的驳回原因以及应对策略&#xff1a; 1. 多级分销模式问题 • 原因&#xff1a;如果业务模式涉及多级分销&#xff0c;…

数据安全治理:从库级权限申请到表级权限申请

背景 随着数据安全意识的提高&#xff0c;企业越来越重视数据治理和权限管理。传统数仓大多对库级别进行读写授权&#xff0c;仅对人工标记的敏感库进行表级别授权&#xff0c;但由于敏感等级是由人为标记&#xff0c;错误率较高&#xff0c;故期望将权限申请流程细化到表级申…

Datawhale AI 夏令营 机器学习挑战赛

一、赛事背景 在当今科技日新月异的时代&#xff0c;人工智能&#xff08;AI&#xff09;技术正以前所未有的深度和广度渗透到科研领域&#xff0c;特别是在化学及药物研发中展现出了巨大潜力。精准预测分子性质有助于高效筛选出具有优异性能的候选药物。以PROTACs为例&#x…

PHP调查问卷小程序系统源码

&#x1f4ca;【问卷新风尚】调查问卷系统小程序&#xff0c;让数据收集更简单&#xff01; &#x1f4f1;【指尖轻点&#xff0c;问卷即刻生成】 告别繁琐的问卷设计过程&#xff0c;调查问卷系统小程序让你在指尖轻点间&#xff0c;就能轻松创建出专业、美观的问卷。无论是…

文章SameStr(五):图5代码

“Publication Figure 5” 百度云盘链接: https://pan.baidu.com/s/15g7caZp354zIWktpnWzWhQ 提取码: 4sh7 Libraries Standard Import library(tidyverse) library(cowplot) library(scales) library(ggpubr)Special library(caret) library(randomForest) library(vip)…

Kudu分区策略

Kudu表的分区策略主要有三种&#xff1a;范围分区&#xff08;Partition By Range&#xff09;、哈希分区&#xff08;Partition By Hash&#xff09;和高级分区&#xff08;Partition By Hash And Range&#xff09;。这些策略都要求分区字段必须包含在主键中。 范围分区&…

内网-有道词典离线翻译安装

一、外部操作 1、在外部下载有道翻译桌面版 下载地址 2、安装到指定目录 3、登录下载离线翻译包 进入设置 -》离线增强-》离线翻译数据包-》翻译包 选择汉英互译 4、找到离线包位置 C:\Users\用户\AppData\Local\Yodao &#xff0c;此处查看自己用户所在C盘位置 二、内网…

【ai】pycharm添加本地解释器

解释器右键可以重命名 系统的解释器竟然安装了4个 可以先使用python虚拟环境中的解释器 虚拟环境虽然是属于其他的项目的&#xff0c;但是看起来也可以给自己的当前项目用&#xff1a; 添加了 别的项目里虚拟环境的解释器

科研加速器FlowUs你的智能论文助手与协作伙伴|文献整理软件|论文进度跟踪|AI辅助研究|科研时间管理

FlowUs这个科研神器简直太棒了&#xff01;试了一下&#xff0c;你的论文进度一目了然&#xff0c;就像有了一个智能助手在帮你规划每一天。日历视图让你的计划和截止日期清晰可见&#xff0c;再也不用担心错过任何重要的研究里程碑。 日历视图&#xff1a;FlowUs的日历视图功能…

DBeaver安装教程(开发人员和数据库管理员通用数据库管理工具)

前言 DBeaver 是一个通用的数据库管理工具和 SQL 客户端&#xff0c;支持 MySQL, PostgreSQL, Oracle, DB2, MSSQL, Sybase, Mimer, HSQLDB, Derby, 以及其他兼容 JDBC 的数据库。DBeaver 提供一个图形界面用来查看数据库结构、执行SQL查询和脚本&#xff0c;浏览和导出数据&a…

React+TS前台项目实战(二十七)-- 首页响应式构建之banner、搜索、统计模块布局

文章目录 前言一、 效果展示二、相关模块1. Statistic统计模块功能分析代码详细注释使用方式 2. Search搜索模块功能分析代码详细注释使用方式 3. banner模块功能分析代码详细注释使用方式 总结 前言 前面我们已经封装了这个项目基本要用到的全局组件了&#xff0c;现在就开始…

【国产开源可视化引擎Meta2d.js】图元

图元 又称画笔Pen。图形表达的基本元素&#xff0c;组成图像的基本单元。 构成 每一个图元由ID、名字、类型、属性&#xff08;数据&#xff09;组成。 ID 名为“id”的特殊属性&#xff0c;图元实例&#xff08;画布上的图元对象&#xff09;的唯一标识。拖拽到画布或创建…

【最新鸿蒙应用开发】——Router页面路由

Router路由 页面路由指的是在应用程序中实现不同页面之间的跳转&#xff0c;以及数据传递。通过 Router 模块就可以实现这个功能. 1. 创建页面 之前是创建的文件&#xff0c;使用路由的时候需要创建页面&#xff0c;步骤略有不同 方法 1&#xff1a;直接右键新建Page&#xf…