1.什么是指针?

int *p;

如上代码,表示我们定义了一个指针变量p,p所指向的数据类型是int类型的。

int a = 100;
int *p = &a;

如上代码,表示我们定义了一个int类型的变量a的值为100,然后我们定义了一个指针变量p,p中存储了a的地址。

在此我们可以简单的对指针下一个定义,什么是指针?

指针就是数据在内存中的地址,如果一个变量中存储了一份数据的指针,我们称其为指针变量。

在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。指针变量的值就是某份数据的地址,这样的一份数据可以是数组、字符串、函数,也可以是另外的一个普通变量或指针变量。

注意,

int *p;
*p = 100;int *p;
p = 100;

如上两种定义方法,第一种方法是定义了一个指针变量p,但是并没有初始化p,也即其并没有为p规划一个初始的地址,*p = 100直接将100这个值放到p这个地址中,但是p并没有地址,所以是错误的。

第二种方法虽然可以定义,但其是不安全的,因为它是将100作为地址赋给了p。

关于*和&

*,取值运算符,后跟一个指针名或地址时,表示给出储存在指针指向的地址的值上。

a = 1;
p = &a;  //指向a的指针,取出a得到地址
c = *p;    //把ptr指向的地址的值赋给c

如上代码的最终结果是将a的值1赋给了c。

&,取址运算符,该运算符一般后跟变量名时,表示给出该变量名的地址。

&a  // 取出a的地址,用%p打印

2.关于指针的操作

 int arr[5] = { 1,2,3,4,5 };int *p1, *p2;p1 = arr; //把数组首元素的地址赋给p1p2 = &arr[2]; //把数组第三个元素的地址赋给p2printf("%p %d %p",p1,*p1,&p1 );

赋值:可以把地址赋值给指针。  用数组名、取址运算符&、另一个指针进行赋值。
在代码中,将arr数组的首地址赋给了p1  ,变量p2获得了第三个元素arr[2]的地址。
        
 解引用:*运算符给出指针指向地址上的值。
*p1的初值为1,该值存储在相应的地址上。

取址:指针变量也有自己的地址和值。对指针而言,&运算符给出了指针本身的地址。
&p1是指向p1的指针,它存储p1的地址,也即arr[0]的地址的地址;而p1是指向arr[0]的指针,它是存储arr[0]值的地址。

 //指针加法p3 = p1 + 4;printf("%p %d\n", p1+4, *(p1+4));p1++;//递增指针printf("%p %d %p\n", p1, *p1, &p1);p2--;//递减指针printf("%p %d %p\n", p2, *p2, &p2);--p1;//恢复为初始值++p2;//恢复为初始值printf("%p %p\n", p1,p2);//一个指针减去另一个指针printf("%p %p %td\n", p2, p1, p2-p1);//一个指针减去一个整数printf("%p %p \n", p3, p3-2);

 指针与整数相加:可以使用+运算符将指针与整数相加,或者整数与指针相加。此时,整数会和指针所指向类型的大小(以字节为单位)相乘,然后将结果与初始地址相加。因此p1+4与&arr[4]等价。
递增指针:递增指向数组元素的指针可以让该指针移动至数组的下一个元素。p1++相当于p1的值也即arr[0]的地址+4,p1指向了arr[1], *p1的值为2
指针减去一个整数:可以使用-运算符从一个指针中减去一个整数。指针为被减数,整数为减数。整数会和指针所指向类型的大小(以字节为单位)相乘,然后用初始地址减去乘积。因此p3-2与&arr[2]等价。
递减指针:与递增指针为反操作。
指针求差:可以计算两个指针的差值。通常求差的两个指针指向同一个数组的不同元素,通过计算求出两元素之间的距离。差值的单位与数组类型的单位相同。如p2-p1得2,表示p1和p2之间差两个int,而不是两个字节。
比较:使用关系运算符可以比较两个指针的值,注意,此时两个指针都指向相同类型的对象。

zxd指针学习笔记1相关推荐

  1. 数组存储与指针学习笔记(三)指针与数组

    嵌入式C语言学习进阶系列文章 GUN C编译器拓展语法学习笔记(一)GNU C特殊语法部分详解 GUN C编译器拓展语法学习笔记(二)属性声明 GUN C编译器拓展语法学习笔记(三)内联函数.内建函数 ...

  2. CSDN在线讲堂-》玩转C指针 学习笔记

    玩转C指针 前段时间听了CSDN在线讲堂的嵌入式C学习关于指针的课,下面是我的学习笔记,记下了我认为比较重要的知识点,笔记并不全面,就算是学习的tips. 1.看下面的代码: #define INT_ ...

  3. 重读经典:C和指针学习笔记

    重读经典:<C和指针>学习笔记 <C和指针>. <C专家编程>. <C陷阱和缺陷>并称c语言三本经典著作,笔者在许多年前囫囵吞枣读完了这三本经典,然后把 ...

  4. 变量和指针——学习笔记

    数据和地址 变量绑定了一块内存,一块内存1-4个字节 一个变量:多个地址所标记的内存段,多个地址! 内存段的第一个地址叫首地址,一般简称为地址. 普通变量的定义 指针变量 int* p; 定义了一个指 ...

  5. 指针学习笔记(更新中)

    1.指针也分类型,有啥类型的数据,就有啥类型的指针.eg:int p; int *p; 2.指针存放的数据的地址,所以指针变量会有eg: int var_runoob = 10; int *p; // ...

  6. C++函数指针 学习笔记

    无参函数指针的声明和调用 #include <iostream> int func1() {return 1; } int main() {int (*ptrFunc)();ptrFunc ...

  7. C语言学习笔记——指针章节

    学习小结 c语言指针学习笔记汇总 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h>//指针 //在计算机科学中,指针是编程语言的一个对 ...

  8. 2020-09-25C++学习笔记引用2:二级指针形参与指针形参的使用方法和区别重难点,主看综合代码(1、指针形参2、引用形参3、二级指针形参4、指针引用形参)

    2020-09-25C++学习笔记引用2:二级指针形参与指针引用搭配做形参的使用方法区别重难点,注意事项主看综合代码(1.指针形参2.引用形参3.二级指针形参4.指针引用形参) 1.指针引用 #inc ...

  9. C++学习笔记7[指针]

    C++学习目录链接: C++学习笔记目录链接(持续更新中) 文章目录 一.变量和指针 1.指针的声明 2.指针的赋值 3.关于指针使用的说明 4.指针运算符和取地址运算符 5.指针运算 二.指针和数组 ...

最新文章

  1. oracle执行计划连接方式
  2. 简洁好用的数据库表结构文档生成工具!
  3. spring中bean的实例化
  4. mac 安装cmake
  5. 征战蓝桥 —— 2015年第六届 —— C/C++A组第10题——灾后重建
  6. 开源 CI/CD 构建框架 TekTon 的深入剖析
  7. rosweb,roslib,ROS2D.PolygonMarker 绘制多边形
  8. linux gnu主要精神,最符合GNU精神的Linux发行版gnewsense
  9. 利用nat123解决微信公众号对接服务器必须为80端口的问题
  10. ubuntu命令行启动浏览器_如何从终端启动默认Web浏览器?
  11. 运维简历怎么写项目描述_实习的简历应该怎么写?
  12. word分栏及序号对齐
  13. python分数类_Python——处理分数类Fraction
  14. mysql in 子查询多个字段_SQL IN 子查询返回多对值
  15. 一个传奇玩家的传奇故事
  16. 技术内幕 | StarRocks Pipeline 执行框架(下)
  17. Q萌可爱,奇瑞QQ冰淇淋给年轻人爱的大礼物
  18. 将一个文件夹拖入MyEclipse的时候,提示destination folder must be accessible
  19. 深入理解RPC-RPC要解决的核心问题和在企业服务中的地位
  20. 360数科华丽财报下的增长困局

热门文章

  1. K-core和K-truss概念和python基本实现
  2. 华为鸿蒙系统支持什么手机_鸿蒙os2.0系统适配机型有哪些_华为鸿蒙系统支持的手机型号...
  3. 世界上第一个会话搜索引擎——Perplexity AI使用测评
  4. simulink 风储调频,风机虚拟惯性一次调频,四机两区域系统
  5. 氩电联焊需要掌握的技术
  6. Unity制作贪吃蛇小游戏
  7. 2.4.2 算术逻辑单元的功能和结构(改进)
  8. 论坛好版主(斑竹) 箴言
  9. 首席新媒体黎想教程:2020实操最全活动策划,运营攻略案例分析!
  10. neatdm路径_trapcode tao插件下载-AE三维物体路径动画插件(Trapcode TAO) 2.1.2 官方最新版 - 河东下载站...