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指针的更多相关文章

  1. TODO:Golang指针使用注意事项

    TODO:Golang指针使用注意事项 先来看简单的例子1: 输出: 1 1 例子2: 输出: 1 3 例子1是使用值传递,Add方法不会做任何改变:例子2是使用指针传递,会改变地址,从而改变地址. ...

  2. enote笔记法使用范例(2)——指针(1)智能指针

    要知道什么是智能指针,首先了解什么称为 “资源分配即初始化” what RAII:RAII—Resource Acquisition Is Initialization,即“资源分配即初始化” 在&l ...

  3. C++虚函数和函数指针一起使用

    C++虚函数和函数指针一起使用,写起来有点麻烦. 下面贴出一份示例代码,可作参考.(需要支持C++11编译) #include <stdio.h> #include <list> ...

  4. C++11 shared_ptr 智能指针 的使用,避免内存泄露

    多线程程序经常会遇到在某个线程A创建了一个对象,这个对象需要在线程B使用, 在没有shared_ptr时,因为线程A,B结束时间不确定,即在A或B线程先释放这个对象都有可能造成另一个线程崩溃, 所以为 ...

  5. c 数组与指针的使用注意事项

    数组变量和指针变量有一点小小的区别 所以把数组指针赋值给指针变量的时候千万要小心 加入把数组赋值给指针变量,指针变量只会包含数组的地址信息 而对数组的长度一无所知 相当于指针丢失了一部分信息,我们把这 ...

  6. Marshal.Copy将指针拷贝给数组

    lpStatuss是一个UNITSTATUS*的指针类型实例,并包含SensorDust字段 //定义一个数组类型 byte[] SensorDust = new byte[30] //将指针类型拷贝 ...

  7. C++智能指针

    引用计数技术及智能指针的简单实现 基础对象类 class Point { public: Point(int xVal = 0, int yVal = 0) : x(xVal), y(yVal) { ...

  8. EC笔记:第三部分:17、使用独立的语句将newed对象放入智能指针

    一般的智能指针都是通过一个普通指针来初始化,所以很容易写出以下的代码: #include <iostream> using namespace std; int func1(){ //返回 ...

  9. 智能指针shared_ptr的用法

    为了解决C++内存泄漏的问题,C++11引入了智能指针(Smart Pointer). 智能指针的原理是,接受一个申请好的内存地址,构造一个保存在栈上的智能指针对象,当程序退出栈的作用域范围后,由于栈 ...

  10. 智能指针unique_ptr的用法

    unique_ptr是独占型的智能指针,它不允许其他的智能指针共享其内部的指针,不允许通过赋值将一个unique_ptr赋值给另一个unique_ptr,如下面错误用法: std::unique_pt ...

随机推荐

  1. Leetcode(35)-搜索插入位置

    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 这个题目很简单,因为它是给定的排序数组而且没有重 ...

  2. Leetcode(1)-两数之和

    给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], target ...

  3. Vue3(四)从jQuery 转到 Vue工程化 的捷径

    不会 webpack 还想学 vue 工程化开发 的福音 熟悉jQuery开发的,学习vue的简单使用是没用啥问题的,但是学习vue的工程化开发方式,往往会遇到各种问题,比如: webpack.nod ...

  4. ORM框架对分表分库之分库和分表指定不同的字段

    ORM框架分库分表已实现了 只分表(根据指定字段) 点我查看demo 只分库(根据指定字段) 点我查看demo 既分库又分表(根据相同的字段) 点我查看demo 上面几点之前我在博客中已经写了使用介绍 ...

  5. js bitwise operation all in one

    js bitwise operation all in one 位运算 & 按位与 | 按位或 ^ 按位异或 / XOR let a = 5; // 000000000000000000000 ...

  6. navigator.geolocation.getCurrentPosition

    navigator.geolocation.getCurrentPosition Geolocation API Specification 2nd Edition W3C Recommendatio ...

  7. 手机 wifi 已连接,不可上网 bug

    手机 wifi 已连接,不可上网 bug 同一个 Wi-Fi,电脑却可以? 注意事项 Mac 共享热点支持有线连接.蓝牙连接的网络进行共享. 如果你的 Mac 本身是通过 wifi 来连接上网的,那就 ...

  8. web hack & web security

    web hack & web security https://www.hacksplaining.com/lessons https://www.hacksplaining.com/ OK ...

  9. “NGK公链+5G”——打造智慧城市

    智慧城市目前被全球各国当成城市建设的重点,旨在城市在智能化的同时,还能给民众带来幸福感和安全感.随着5G的到来,城市智能化又到了一个新的高度.比如无人驾驶.无人机等方面将会产生质的变化,因为5G的加入 ...

  10. Vue学习笔记-django-cors-headers安装解决跨域问题

    一  使用环境: windows 7 64位操作系统 二  jango-cors-headers安装解决跨域问题(后端解决方案) 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的 ...