IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 学习C语言的第十七天:指针 -> 正文阅读

[C++知识库]学习C语言的第十七天:指针

一篇文章教你学会指针(宝藏好文):

https://juejin.cn/post/6892199770106888199

你对指针的掌握程度甚至直接决定了你C语言的编程能力!!!

  • 请看图:
    在这里插入图片描述
  • 如果需要获取某个变量的地址,可以使用取地址运算符(&):
  • char *pa=&a;
  • int *pb =&f;
  • 如果需要获取某个变量的地址,可以使用取地址运算符(&),也可称为间接运算符:
  • printf("%c,%d\n",*pa,*pb);

理解指针:

  1. 在定义指针时,(*)表示定义指针。如:char *a=b;char* a=b
  2. 而在输出时,表示取值。如:printf("a=%c\n",*pa);

%p:

??格式控制符“%p”中的p是pointer(指针)的缩写。指针的值是语言实现(编译程序)相关的,但几乎所有实现中,指针的值都是一个表示地址空间中某个存储器单元的整数。printf函数族中对于%p一般以十六进制整数方式输出指针的值,附加前缀0x。

??%p是打印地址的, %x是以十六进制形式打印, 完全不同!另外在64位下结果会不一样, 所以打印指针老老实实用%p 。

%p和%x的不同:

??%x同样输出16进制形式,不过%x对应的是int型,也就是说,其输出长度与系统int型占的字节数相等回。如32位编译器,int型占4位字节,那么%x输出的结果最多为16个16进制字符。

??而%p输出宽度取决于系统地址总线位数,即16位最多输出4位16进制字符,32位最多输出8位16进制字符,64位最多输出16位16进制字符。

    1 #include<stdio.h>
    2 int main()
    3 {
    4   char a='f';
    5   int i=123;
    6                      
    7   char *pa=&a;//这里表示把a的地址赋予给指针pa
    8   int *pi=&i;        
    9                      
   10   printf("a=%c\n",*pa);
   11   //这里表示用取值运算符(*)间接取出pa表示地址的值
   12   //为什么是间接运算符(*):取出地址,然后通过地址取值变量a
   13   printf("i=%d\n",*pi);
   14                      
   15   *pa='g';           
   16   *pi+=1;            
   17                      
   18   printf("now,a=%c\n",*pa);
   19   printf("now,i=%d\n",*pi);
   20                      
   21   printf("sizeof pa=%d\n",sizeof(pa));
   22   //编译器通过sizeof输出的字节数不一定相同,这源于编译器的规定
   23   //我这里规定指针都是八个字节,指针字节数与数据类型无关
   24   printf("sizeof pa=%d\n",sizeof(pi));
   25                      
   26   printf("the addr of a is:%p\n",pa);
   27   //这里未加间接运算符,所以取出的是pa(指针),指针对应的值是一个地址(a的地址)
   28   //故取出一个地址   
   29   //输出地址用%p来表示                                                       
   30   printf("the addr of i is:%p\n",pi);
   31            
   32   return 0;
   33 }

注意(难以排查的bug):

  • 避免访问野指针(未初始化的指针)。
  • 如:
#include<stdio.h>
int main()
{
	int *a;
	*a=123;
	return 0;
}
  • 这里没有赋予指针a变量地址,所以指针a会随机指向一个变量地址。如果指向的是系统关键代码的变量,后果不堪设想,当然一般情况下系统会自动中断程序运行并报错
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-03 01:01:01  更:2022-02-03 01:01:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:00:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码