C语言从入门到精通第16天(指针的定义与基本使用)

这篇具有很好参考价值的文章主要介绍了C语言从入门到精通第16天(指针的定义与基本使用)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是指针?

在使用指针之前我们需要对指针进行初步的了解,首先我们要知道什么是指针?

通过前面的学习我们已经知道了内存的存储方式,他是通过一个字节一个字节的连续存储单位进行内存的存储,每一个字节我们称为一个内存单元。为了能够正确的访问这些内存单元,就必须为每个内存单元编上一个号,根据一个内存单元的编号即可准确的找到该内存单元,以及提取该内存单元存储的数据。

这里的内存单元的编号就叫做地址,而这个地址就是我们所说的指针。

指针变量的定义

如果在程序中定义了一个变量,在对程序进行编译或运行时,系统会给这个变量分配内存单元,并确定他的内存编号,即变量的地址,也称变量的指针。而存放这个变量地址的变量被称为指针变量

语法:

数据类型 *指针变量名

  • 数据类型支持C语言的所有数据类型
  • 指针变量名遵循C语言变量的命名规则

例如:int *p;定义一个指针变量,p为变量,int * 是类型。在这里我们也认为指针是一种数据类型。

指针变量的基本使用

1)指针变量赋值

语法:
指针变量 = &变量名;

  • 其中&为取地址运算符
  • 如果这里直接定义指针变量,而不进行初始化(即赋值),则指针为野指针。
  • 定义指针时,可以将指针初始化为空指针,即将NULL(是一个值为0的宏常量)赋值给指针变量。

注:
1)野指针的危害:因为直接对指针进行定义而不进行初始化,则指针变量的指向空间就不确定,所以指针可能会操作到非法的内存空间,导致程序崩溃。
2)空指针的作用是防止指针变量变成野指针。

这里是将变量的地址赋值个指针变量,因为指针也表示的是一个地址。即指针变量的值可以代表这个指针指向以这个值为首地址的那块内存空间。如下图:

C语言从入门到精通第16天(指针的定义与基本使用)

在定义指针变量并对这个指针进行初始化(即赋值)时,系统会自动地分配内存给指针,并且要将这个变量的地址赋值给这个指针,所以这个指针的内容就是变量的地址。

代码如下:

int main(){
    // 定义一个野指针
    int *p;
    printf("%p",p);  // 输出值为0000000000000000

    // 定义一个空指针,防止指针变成野指针
    int *f = NULL;

    // 定义一个变量
    int a = 3;
    // 定义一个指针
    int *t;
    t = &a;
    printf("a id: %p\n",&a);  // 输出为0000007f555ff61c
    printf("t id: %p\n",t);  // 输出为0000007f555ff61c

    // 还可以这样进行初始化
    int *l = &a;
    printf("l id: %p",l);  // 输出为0000007f555ff61c

}

2)指针变量操作指向的内存空间

语法:

*指针变量

通过指针运算符(也称”间接访问“运算)*对指针所指向的变量的地址的内容进行访问。并且可以通过指针变量访问和修改所指向的内存空间中的内容。代码如下:文章来源地址https://www.toymoban.com/news/detail-430561.html

int main() {
    // 定义一个变量
    int a = 3;

    // 定义一个指针
    int *t = &a;

    // 可以通过 * 对变量的内容进行访问
    printf("%d\n",*t);  // 输出为3

    // 改变指向内容的值
    *t = 10;
    printf("%d %d",*t,a); // 输出为10 10
}

到了这里,关于C语言从入门到精通第16天(指针的定义与基本使用)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 爬虫入门到精通_基础篇1(爬虫基本原理讲解, Urllib库基本使用)

    发起请求:通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应。 获取响应内容:如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(如图片视频)等类型。

    2024年01月23日
    浏览(42)
  • Python从入门到精通8天(装饰器的基本使用)

    装饰器是一个著名的设计模式,经常被用于有切面(aspect)需求的场景,如插入日志、性能测试、事务处理等。装饰器可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。这种编程方式被称为面

    2023年04月23日
    浏览(48)
  • 【Linux从入门到精通】vim的基本使用各种操作详解

       文章目录 一、vim编辑器简单介绍 二、vim编辑器的四种模式 2、1 正常/普通/命令模式(Normal mode) 2、2 插入模式(Insert mode) 2、3 末行模式(last line mode) 三、命令模式的相关操作实例 3、1 光标的相关操作 3、2 文本操作 四、插入模式下的相关操作 五、末行模式下的相关操作 🙋

    2024年02月04日
    浏览(43)
  • 【Linux从入门到精通|开发工具】---gcc/g++的基本使用

    个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【Linux专栏】🎈 本专栏旨在分享学习Linux的一点学习心得,欢迎大家在评论区讨论💌 接下来我们来学习 Linux编辑器---gcc/g++ 的使用。 在学习 gcc/g++ 之前,我们先来简单

    2024年02月12日
    浏览(44)
  • R语言从入门到精通之【R语言的使用】

    1.R语言从入门到精通之【R语言介绍】 2.R语言从入门到精通之【R语言下载与安装】 3.R语言从入门到精通之【R语言的使用】 R语句由函数和赋值构成。R使用 - ,而不是 = 作为赋值符号; # 代表注释,在#之后出现的任何文本都会被R解释器忽略。 示例如下:

    2024年02月15日
    浏览(37)
  • 【C++入门到精通】智能指针 [ C++入门 ]

    在C++编程中,内存管理一直是一个重要的话题。手动分配和释放内存可能会导致各种问题,例如内存泄漏和悬挂指针,这些问题往往会导致程序崩溃或产生不可预测的结果。为了解决这些问题, C++提供了一种称为智能指针的机制,它可以自动管理内存分配和释放,从而避免了

    2024年01月21日
    浏览(45)
  • Superset 使用手册 -- 从入门到精通 (基本使用+权限管理+可视化实时刷新) 爆肝七天力作

    第一部分Superset 基本使用 1.1 对接数据源(目前支持mysql、hive、es) 登录superset后,点Databases 点这里 选择数据源 按要求填写(把=后面的东西黏贴到url里) Elasticsearch= elasticsearch+http://{user}:{password}@{host}:9200/ Hive = hive://hive@{hostname}:{port}/{database} Mysql = mysql://:@/ 出现这个表示连接成

    2023年04月24日
    浏览(41)
  • C++从入门到精通 第五章(指针与引用)

    (1)C++程序在执行时,将内存大方向划分为 4个区域 : ①代码区: 存放函数体的二进制代码 ,由操作系统进行管理的。 ②全局区: 存放全局变量和静态变量以及常量 。 ③栈区: 由编译器自动分配释放 , 存放函数的参数值 、 局部变量等 。 ④堆区: 由程序员分配和释放

    2024年02月20日
    浏览(54)
  • 【C++入门到精通】智能指针 shared_ptr 简介及C++模拟实现 [ C++入门 ]

    在 C++ 动态内存管理中,除了 auto_ptr 和 unique_ptr 之外,还有一种 智能指针 shared_ptr ,它可以让多个指针共享同一个动态资源,并且能够自动释放资源。 shared_ptr 通过引用计数的方式来管理内存,能够避免程序中出现悬空指针和内存泄漏等问题 。本文将介绍 shared_ptr 的简介和

    2024年01月22日
    浏览(49)
  • C/C++|物联网开发入门+项目实战|指针|嵌入式C语言高级|C语言内存空间的使用-学习笔记(9)

    参考: 麦子学院-嵌入式C语言高级-内存空间 内存类型资源地址、门牌号的代名词 指针:地址的代名词 指针变量:存放指针这个概念的盒子 *P char *p *p; C语言娟译器对指针这个特殊的概念,有2个疑问? 1、分配一个盒子,盒子要多大? 在32bit系统中,指针就4个字节 2、盘子里存放

    2023年04月22日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包