c语言基础-------指针变量和变量指针

news2024/9/23 7:28:50

在 C 语言中,“变量指针”和“指针变量”这两个术语虽然经常交替使用,但它们的侧重点有所不同。

指针变量

“指针变量”是指其值为内存地址的变量。指针变量的类型定义了它所指向的数据类型,例如 int * 是一个指向整型数据的指针变量。
以下是一个指针变量的例子:

int var = 5;     // 声明一个整型变量 var
int *ptr;        // 声明一个指向整型的指针变量 ptr
ptr = &var;      // 将 var 的地址赋值给指针变量 ptr

在这个例子中,ptr 是一个指针变量,它存储了变量 var 的地址。
在这里插入图片描述

变量指针

“变量指针”通常是指向某个特定变量的指针。这个术语更多地强调指针与它所指向的变量之间的关系。
以下是一个变量指针的例子:

int var = 5;     // 声明一个整型变量 var
int *ptr = &var; // 声明一个指向 var 的指针,即 var 的变量指针

在这个例子中,ptr 是一个指向 var 的指针,我们可以说 ptrvar 的变量指针。

区别

  • 指针变量:侧重于指针本身,强调这是一个变量,其值是地址。
  • 变量指针:侧重于指针所指向的变量,强调这是一个指向特定变量的指针。
    在实际使用中,这两个术语经常可以互换使用,因为它们都描述了相同的底层概念:一个变量,其值是另一个变量的地址。不过,理解它们之间的细微差别可以帮助你更准确地表达和思考指针在代码中的作用。

总结

无论是“指针变量”还是“变量指针”,它们都是 C 语言中用于存储和管理内存地址的工具。掌握指针的使用对于深入理解 C 语言至关重要,尤其是在进行内存操作、数据结构设计、函数参数传递等高级编程任务时。

怎样定义指针变量

在 C 语言中,定义指针变量的基本步骤如下:

  1. 声明指针变量:首先,你需要声明一个指针变量。在声明时,你需要在变量名前加上星号 *,后面跟着指针所指向的数据类型。
  2. 初始化指针变量(可选):在声明之后,你可以选择立即初始化指针变量,让它指向一个具体的变量地址。
    以下是一些定义指针变量的例子:

声明指针变量

int *ptrToInt;      // 声明一个指向 int 类型的指针变量
char *ptrToChar;    // 声明一个指向 char 类型的指针变量
float *ptrToFloat;  // 声明一个指向 float 类型的指针变量
double *ptrToDouble;// 声明一个指向 double 类型的指针变量

初始化指针变量

int var = 10;       // 声明一个 int 类型的变量
int *ptrToInt = &var; // 初始化指针变量,让它指向 var 的地址
char ch = 'A';      // 声明一个 char 类型的变量
char *ptrToChar = &ch; // 初始化指针变量,让它指向 ch 的地址
float f = 3.14f;    // 声明一个 float 类型的变量
float *ptrToFloat = &f; // 初始化指针变量,让它指向 f 的地址
double d = 2.71828; // 声明一个 double 类型的变量
double *ptrToDouble = &d; // 初始化指针变量,让它指向 d 的地址

注意事项

  • 在声明指针变量时,星号 * 表示这是一个指针类型,而不是解引用操作符。
  • 指针变量必须指向与其类型匹配的变量地址。例如,一个 int * 类型的指针只能指向 int 类型的变量。
  • 在初始化指针变量时,使用取地址运算符 & 来获取变量的地址。
    正确地声明和初始化指针变量是 C 语言编程的基础,对于后续的内存操作和数据结构设计至关重要。

定义指针变量注意事项

在定义指针变量时,有一些重要的注意事项需要遵循,以避免潜在的错误和程序中的不稳定行为。以下是一些关键点:

  1. 指针类型必须匹配
    • 指针变量的类型必须与其指向的变量类型相匹配。例如,一个 int * 类型的指针应该只指向 int 类型的变量。
  2. 初始化指针
    • 在使用指针之前,应该对其进行初始化。未初始化的指针可能会导致程序崩溃或产生不可预测的行为。
    • 初始化指针时,可以使用 NULL0 来表示指针不指向任何有效地址。
      在这里插入图片描述
  3. 避免野指针
    • 野指针是指向未知内存地址的指针。避免野指针的方法是在声明指针后立即对其进行初始化。
  4. 指针算术
    • 指针可以进行算术操作,但只能在其指向的数组内部进行。对非数组指针进行算术操作是未定义行为。
  5. 指针与数组
    • 数组名在大多数情况下可以作为指向数组首元素的指针。但是,数组名是一个

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

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

相关文章

数据埋点系列 16| 数据可视化高级技巧:从洞察到视觉故事

数据可视化是将复杂数据转化为直观、易懂的视觉表现的艺术和科学。本文将探讨一些高级的数据可视化技巧,帮助您创建更具吸引力和洞察力的数据展示。 目录 1. 高级图表类型1.1 桑基图(Sankey Diagram)1.2 树状图(Treemap&#xf…

3、目标定位(视觉测距)

目标定位的目的:获取物品相对于视觉模块的三维坐标,并将其转换为物品相对于机械臂坐标原点的三维坐标。 要获取物品三维坐标,则首先要测量物品距离摄像头的距离,又因为摄像头安装在机械臂末端上方,所以获取物品相对于摄…

基于springboot的高校学生服务平台的设计与实现--附源码91686

目录 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 删除信息流程 2.3 系统功能分析 …

代码随想录算法训练营第二十天| 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

目录 一、LeetCode 235. 二叉搜索树的最近公共祖先思路:C代码 二、LeetCode 701.二叉搜索树中的插入操作思路C代码 三、LeetCode 450.删除二叉搜索树中的节点思路C代码 总结 一、LeetCode 235. 二叉搜索树的最近公共祖先 题目链接:LeetCode 235. 二叉搜…

C语言:for、while、do-while循环语句

目录 前言 一、while循环 1.1 while语句的执行流程 1.2 while循环的实践 1.3 while循环中的break和continue 1.3.1 break 1.3.2 continue 二、for循环 2.1 语法形式 2.2 for循环的执行流程 2.3 for循环的实践 2.4 for循环中的break和continue 2.4.1 break 2.4.2 …

Java数组03:数组边界、数组的使用

本节内容视频链接:https://www.bilibili.com/video/BV12J41137hu?p55&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5https://www.bilibili.com/video/BV12J41137hu?p55&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.数组边界 数组下标的合法区间[ 0, Len…

综合监管云平台存在信息泄露漏洞_中科智远综合监管云平台

0x01阅读须知 本文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考。本文章仅用于信息安全防御技术分享,因用于其他用途而产生不良后果,作者不承担任何法律责任&#…

昇腾 - 快速理解AscendCL(Ascend Computing Language)基础概念的HelloWord

昇腾 - 快速理解AscendCL(Ascend Computing Language)基础概念的HelloWord flyfish AscendCL(Ascend Computing Language)是一套用于在昇腾平台上开发深度神经网络应用的C语言API库,提供运行资源管理、内存管理、模型…

鸿蒙(API 12 Beta3版)【录像流二次处理(C/C++)】媒体相机开发指导

通过ImageReceiver创建录像输出,获取录像流实时数据,以供后续进行图像二次处理,比如应用可以对其添加滤镜算法等。 开发步骤 导入NDK接口,接口中提供了相机相关的属性和方法,导入方法如下。 // 导入NDK接口头文件#in…

ArcGIS Pro基础:软件的常用设置:中文语言、自动保存、默认底图

上图所示,在【选项】(Options)里找到【语言】设置,将语言切换为中文选项,记得在安装软件时,需要提前安装好ArcGIS语言包。 上图所示,在【选项】里找到【编辑】设置,可以更改软件默认…

Java面试八股之如何保证消息队列中消息不重复消费

如何保证消息队列中消息不重复消费 要保证消息队列中的消息不被重复消费,通常需要从以下几个方面来着手: 消息确认机制: 对于像RabbitMQ这样的消息队列系统,可以使用手动确认(manual acknowledge)机制来…

Eureka原理与实践:构建高效的微服务架构

Eureka原理与实践:构建高效的微服务架构 Eureka的核心原理Eureka Server:服务注册中心Eureka Client:服务提供者与服务消费者 Eureka的实践应用集成Eureka到Spring Cloud项目中创建Eureka Server创建Eureka Client(服务提供者&…

ISA95 企业控制集成标准

ANSI/ISA-95 企业控制系统集成介绍及其全系列最新标准下载(转)https://www.cnblogs.com/TonyJia/p/17616347.html ANSI 1. 综述 ISA-95 简称S95,也有称作SP95。ISA-95 是企业系统与控制系统集成国际标准,由国际自动化学会(ISA…

react最好用的swiper插件和拖动插件 react-tiny-slider react-draggable

react移动端项目,其实有挺多的ui框架的,但是我们公司的项目,都是自己封装的ui库,又不可能为了一个轮播图就去再安装一个ui库 所以找了很多的轮播插件,都是不能满足需求 最后找到了它,react-tiny-slider&…

1 什么是linux驱动

1 目录 1 一、什么是linux驱动? 1、驱动的作用 2、 3、驱动的分类 4、linux源码 5、最简单的linux驱动 二、如何编译驱动程序 -- 有两种编译方法: -- 什么是Linux内核模块? -- Linux内核模块的编译 一、什么是linux驱动&#xff…

原生HTML5、CSS、JavaScript实现简易网易云音乐播放

1.效果图 2.源码 1.index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>网易云音乐</title><link rel"stylesheet" href"../CSS/index.css"> </head>…

C++:新枚举与新结构

一、枚举 &#xff08;一&#xff09;C枚举&#xff1f;真整数&#xff01; 考虑下面的程序 #include <stdio.h> #include <stdlib.h>typedef enum {spring, summer, autumn, winter} Season;void printSeason(Season season){switch(season){case spring:print…

【Java学习】实现图书管理系统

所属专栏&#xff1a;Java学习 &#x1f341;1. 功能演示 用户分为普通用户和管理员&#xff0c;登录进系统之后可以对图书进行一系列操作&#xff0c;此时我们要明白&#xff0c;对图书的操作是通过书架来执行的&#xff0c;我们平常在图书馆上借书就是在书架上 &#x1f…

简简单单用用perf

实践前提&#xff1a;正确安装 perf 和 FlameGrap。若没安装&#xff0c;心领神会亦可。 1 示例程序 #define m_loop() ({ for(int i0; i < 1000000; i); })void fb(void) {m_loop(); }void fj(void) {fb(); }void fy(void) {m_loop(); }void loop(void) {for (;;) {fy();…

实习教训,永远铭记

1.毕了业宁宁可收入低一点&#xff0c;但一定去那种开发产品有规章制度&#xff0c;有流程规范的公司。 永远不接受小公司&#xff0c;没有任何规范可言的小公司&#xff01;&#xff01;&#xff01;&#xff01; 永远不接受小公司&#xff0c;没有任何规范可言的小公司&…