当前位置: 首页 > news >正文

printf 指针地址_C语言零基础入门-指针-03

6f055cdd9fc055ddfd85f03b201cdec0.png

C语言零基础入门-指针-03

本节要点:
1,指针操作int类型数据。
2,指针操作float,char类型数据。

01. 指针操作int类型数据

其实这一小节主要是带大家回顾一下,因为前边我们已经讲了很多的指针栗子,并且这些例子都是基于int类型的数据。

01.1 指针的定义与使用

首先回顾一下指针变量是怎么进行定义与使用的。通过下边的一个例子就可以说明了(代码不复杂,只是加入了格式控制内容,所以较长)。

  • 栗子
#include<stdio.h>

void main(){
    // 1,
    int a = 21;
    int *p = &a;
    printf("  p: %dn",p);
    printf(" *p: %dn",*p);
    printf("n");

    // 2,
    int *p1;
    p1 = p;
    printf(" p1: %dn",p1);
    printf(" *p1 %dn",*p1);
    printf("n");

    // 3,
    *p1 = 32;
    printf(" p1: %dn",p1);
    printf(" a:  %dn",a);
    printf("n");

}
  • 运行结果

a603ebc5bd647efbf04a0cfcf39fe553.png
  • 解析

先看第一部分:

  • 首先定义了一个整形变量a=21,紧接着定义了一个指针变量p,并且给p赋予的初始值是a的地址。
  • 再然后我们输出了一下整型变量p,由于p就是一个地址变量,所以他存放的是a的地址,因此输出p的时候就输出的是地址。
  • 最后输出了一下*p,前边说过,*p的作用是得到地址p中存放的数据,因此,输出了数据21。
  • 地址图如下:

0a48c52250c5643ccf478b9d91654389.png

再看第二部分:

  • 首先定义了一个指针变量p1,但是没有直接赋初始值。
  • 然后我们把p的内容给p1了,因为p中存放的是a的地址,所以此时p1中存放的也是a的地址。
  • 再然后输出一下p1,我们发现它的内容确实是a的地址。
  • 于是同样使用*p1输出一下看看p1所指向的地址中存放的数据是什么,还是a的21。
  • 地址图如下:

5e9a72fbe6fc3a26729c46357771da90.png

换一种地址图表示是这样的:

ff5ec411cde166d7467df618bd8168cc.png

第三部分:

既然p1也已经指向了a的地址,所以我们就可以使用指针p1来修改a中的数据了。

最后输出一下a的值,发现的修改成功。

02.指针操作float,char类型数据。

02.1 指针定义详解

在前边我们只讲了int类型的指针,然后大家旧习惯用下边的定义方式。

int a = 23;
int *p = &a;

这里我们来分析一下 int *p = &a; 的含义。

  • 首先开始的类型 int 是怎么确定的呢?,其实它的类型是由a的类型确定的。也许你会有疑问,为什么这个int不是指*p的类型是int呢?
  • 你想吖,地址肯定都是整数了,怎么可能会是其他类型。

所以:指针变量最前边的类型,是指这个指针 所指向的地址中 存放的数据 的数据类型吖。

02.2 float型指针

所以啊,我们定义float类型的指针的时候,这个float指的是:实际的数据的数据类型。见下边的栗子:

栗子:

#include<stdio.h>

void main(){
    float a = 21.0;
    float *p = &a;

    printf("  p: %dn",p);
    printf(" *p: %fn",*p);

}

结果:

74ed55257a9c42d908f518dc89fd2f35.png

分析:

6573797ff758bd5f35b86e51a744a557.png
  • 指针变量前边的数据类型实际上是:这个指针指向的地址 中存放的数据的 数据类型。
  • 指针变量的数据类型与其定义之时前边的数据类型无关,指针变量的数据类型恒为int。

02.3 char类型指针

刚才我们说了指针变量定义的时候,前边的数据类型其实是:这个指针所指向的地址中的数据的数据类型。

因此,定义char指针,他必须指向一个char类型的数据。

#include<stdio.h>

void main(){
    char a = 'A';
    char *p = &a;

    printf("  p: %dn",p);
    printf(" *p: %cn",*p);

}

结果:

57856363e4921c6d09b2b7e8c42f9971.png

这个就不解释了吧。原理与上边一样。

03. 结束

先到这里吧。

公众号:小小猿笔记

http://weixin.qq.com/r/_y9cRE3EbRASrQkn93rp (二维码自动识别)

相关文章:

  • python有颜色进度条库_wxPython实现带颜色的进度条
  • python字典的一些操作_python 字典的一些操作
  • git 如何重新登录github_GitHub多账号管理
  • 解决python脚本连接终止问题_paramiko:自动终止远程启动的进程
  • eclipse ide for c/c++_重拾《 两周自制脚本语言 》- Eclipse插件实现语法高亮
  • eclipse启动springboot项目_教程:Systemctl启动SpringBoot项目
  • 非管理员用户使用iis_(七)使用管理员身份新增使用用户
  • php制作万年历的步骤_Excel 制作偶像万年历
  • 循环buffer的实现_用PHP实现高并发服务器
  • 统计一行文本的单词个数_【我爱背单词】从300万单词中给你一份3000英语新闻高频词汇...
  • hbase查询语句_Phoenix+Hbase二级索引
  • kafka源码_Kafka源码阅读之:日志段kafka.log.LogSegment
  • python怎么安装re模块_python模块模块re
  • java练习_java练习本(原每日一练)(20190429)
  • java 工厂模式_设计模式中的工厂模式,一文就能看懂(java实现)
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • Android Volley源码解析
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Java反射-动态类加载和重新加载
  • JSDuck 与 AngularJS 融合技巧
  • Map集合、散列表、红黑树介绍
  • Python十分钟制作属于你自己的个性logo
  • Ruby 2.x 源代码分析:扩展 概述
  • ubuntu 下nginx安装 并支持https协议
  • 给初学者:JavaScript 中数组操作注意点
  • 关于Java中分层中遇到的一些问题
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 排序算法学习笔记
  • 前端攻城师
  • 全栈开发——Linux
  • 手写一个CommonJS打包工具(一)
  • 消息队列系列二(IOT中消息队列的应用)
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • Python 之网络式编程
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • 说说我为什么看好Spring Cloud Alibaba
  • 正则表达式-基础知识Review
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • $GOPATH/go.mod exists but should not goland
  • (16)Reactor的测试——响应式Spring的道法术器
  • (4)Elastix图像配准:3D图像
  • (bean配置类的注解开发)学习Spring的第十三天
  • (BFS)hdoj2377-Bus Pass
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (十)T检验-第一部分
  • (五)c52学习之旅-静态数码管
  • (学习日记)2024.01.09