1-认识c指针
1.指针和内存
c程序在编译后,会以三种形式使用内存
1静态/全局内存
静态声明的变量分配在这里,全局变量也使用这部分内存。这些变量在程序开始运行时分配,直到程序终止时才会消失
2.自动内存
这些变量在函数内部声明,并且在函数调用时才被创建。他们的作用域局限于函数内部,而且生命周期限制在函数的执行时间内。
3.动态内存
内存分配在堆上,可以根据需要释放,而且直到释放才会消失。指针引用分配的内存,作用域限与引用内存的指针。
如何阅读指针说明
1 const int *ptr;
2 #代码解读
3 1.ptr 是有个变量
4 2.ptr 是一个指针变量
5 3.ptr是一个指向整型的指针变量
6 4.ptr是一个指向常数常亮的指针变量
注意:指针变量所对应的是地址,而整型变量存放的是某个地址上数据
用间接引用操作符(*)接引指针
1 int num = 5;
2 int *ptr = #
3 printf("%d\n",*ptr);
4 #指针的接引 *ptr
我们也可以把接引操作符的结果用作左值。术语左值是指赋值操作符左边的操作数,所有左值都必须可以修改,因为他们会被赋值。
null的概念
任何时候都不能对NULL指针进行接引,因为它并不包含合法地址
0的含义可能随着代码的不同而含义不同
1 int num = 9;
2 int *ptr = 0;#此时的0为NULL
3 *ptr - 0;#此时的0为常数0
指针操作符
* 用来声明指针
* 用来解引指针
-> 指向指针
+ 用于指针做加法
- 用于指针做减法
== != 比较两个指针
> < >= <= 比较两个指针
1 int vector = {1,2,3}
2 int * ptr = vector;
3 printf("%d\n",*ptr);
4 #输出的值为1
5 ptr += 1;
6 printf("%d\n",*ptr);
7 ptr += 1;
8 printf("%d\n",*ptr);
9 #输出的值为1
10 ptr += 1;
11 #输出的值为1
每次的指针加一,地址就加4
指针做减法
1 int vector = {28,41,7};
2 int *ptr = vectoe + 2;
3 printf("%d\n",*ptr);
4 #打印出的值是7;
5 ptr --;
6 printf("%d\n",*ptr);
7 #打印出的值是41;
ptr的每次减一,地址都会向前移动四个字节
指针相减
两个指针相减会的到两个指针的地址上的差值,可以判断数组中的元素顺序。
1-认识c指针的更多相关文章
- TODO:Golang指针使用注意事项
TODO:Golang指针使用注意事项 先来看简单的例子1: 输出: 1 1 例子2: 输出: 1 3 例子1是使用值传递,Add方法不会做任何改变:例子2是使用指针传递,会改变地址,从而改变地址. ...
- enote笔记法使用范例(2)——指针(1)智能指针
要知道什么是智能指针,首先了解什么称为 “资源分配即初始化” what RAII:RAII—Resource Acquisition Is Initialization,即“资源分配即初始化” 在&l ...
- C++虚函数和函数指针一起使用
C++虚函数和函数指针一起使用,写起来有点麻烦. 下面贴出一份示例代码,可作参考.(需要支持C++11编译) #include <stdio.h> #include <list> ...
- C++11 shared_ptr 智能指针 的使用,避免内存泄露
多线程程序经常会遇到在某个线程A创建了一个对象,这个对象需要在线程B使用, 在没有shared_ptr时,因为线程A,B结束时间不确定,即在A或B线程先释放这个对象都有可能造成另一个线程崩溃, 所以为 ...
- c 数组与指针的使用注意事项
数组变量和指针变量有一点小小的区别 所以把数组指针赋值给指针变量的时候千万要小心 加入把数组赋值给指针变量,指针变量只会包含数组的地址信息 而对数组的长度一无所知 相当于指针丢失了一部分信息,我们把这 ...
- Marshal.Copy将指针拷贝给数组
lpStatuss是一个UNITSTATUS*的指针类型实例,并包含SensorDust字段 //定义一个数组类型 byte[] SensorDust = new byte[30] //将指针类型拷贝 ...
- C++智能指针
引用计数技术及智能指针的简单实现 基础对象类 class Point { public: Point(int xVal = 0, int yVal = 0) : x(xVal), y(yVal) { ...
- EC笔记:第三部分:17、使用独立的语句将newed对象放入智能指针
一般的智能指针都是通过一个普通指针来初始化,所以很容易写出以下的代码: #include <iostream> using namespace std; int func1(){ //返回 ...
- 智能指针shared_ptr的用法
为了解决C++内存泄漏的问题,C++11引入了智能指针(Smart Pointer). 智能指针的原理是,接受一个申请好的内存地址,构造一个保存在栈上的智能指针对象,当程序退出栈的作用域范围后,由于栈 ...
- 智能指针unique_ptr的用法
unique_ptr是独占型的智能指针,它不允许其他的智能指针共享其内部的指针,不允许通过赋值将一个unique_ptr赋值给另一个unique_ptr,如下面错误用法: std::unique_pt ...
随机推荐
- springboot demo(一)快速开始
快速入门 maven构建项目 1.访问http://start.spring.io/ 2.选择构建工具Maven Project.Spring Boot版本2.26以及一些工程基本信息,点击" ...
- Web 前端如何一键开启上帝模式
Web 前端如何一键开启上帝模式 God Mode document.designMode = `on`; refs https://www.cnblogs.com/xgqfrms/tag/desig ...
- Python Web Framework All In One
Python Web Framework All In One Django and Flask are the top Python web frameworks so far. Django ht ...
- Electron Security All In One
Electron Security All In One https://www.electronjs.org/docs/tutorial/security CSP Content-Security- ...
- Learning JavaScript with MDN & 使用 MDN 学习 JavaScript
Learning JavaScript with MDN & 使用 MDN 学习 JavaScript Learn JavaScript with MDN 和 MDN 一起学习 JavaScr ...
- NAIO & Node.js All In One
NAIO & Node.js All In One Node.js Tutorials https://nodejs.org/en/docs/ https://nodejs.org/en/do ...
- Netty & websockets
Netty & websockets Netty is a non-blocking I/O client-server framework for the development of Ja ...
- js replace all
js replace all https://stackoverflow.com/questions/1144783/how-can-i-replace-all-occurrences-of-a-st ...
- Mac mini M1使用简单体验(编程、游戏、深度学习)
好久不见了各位! 前一阵子忍不住剁手买了M1芯片的mac mini,为了弥补自己的内疚感就卖了自己的旧的mbp2017款.数据也完全迁移到了新机器上,之前的工作也就由mbp2017彻底换成mac mi ...
- JQuery:JQuery基本语法,JQuery选择器,JQuery DOM,综合案例 复选框,综合案例 随机图片
知识点梳理 课堂讲义 1.JQuery快速入门 1.1.JQuery介绍 jQuery 是一个 JavaScript 库. 框架:Mybatis (jar包) 大工具 插件:PageHelper (j ...