Linux学习---指针运算、修饰符(const、volatile、typedef)及、运算符(++、--、+、-)
- const:常量、只读【不能变】
char *p;
const char *p; 【T】 字符串内容可以为“hello world”或“aaa”,但只读(不可修改)
char const *p;
char * const p; 【T】 一般为硬件资源 ,地址不变,但地址内容可变。
char *p const;
const char * const p; ROM
- volatile
防止优化指向内存地址。
- typedef
- 指针加法
指针的加法、减法运算,实际上加的是一个单位,单位的大小为sizeof(p)
指针的自增和加一是有区别的:
eg: int *p; p+1 //以p为参考位置(p值不变)。
p++、p-- //地址会更新(p值有变化)。
eg:
int a = 0x12345678;
int b = 0x99991199;
int *p1 = &b;
char *p2 = (char *)&b;
printf("p1+1 is %x,%x,%x\n",*(p1+!),p1[1],*p1+1); //12345678,12345678,9999119a;
printf("p2+1 is %x\n",p2[1]); // 11 char型,p2=p[0] = 99(低八位),p[1]为11。
注: *(p1+1) ===p1[1]; //此时[]为标签,不是数组。
- 指针越界访问。
① 使用指针修改const修饰的值。
eg:
const int a= 10;
int b = 20;
printf("%x ",a); //a = 14
printf("%x ",b); //14 可见连续声明的变量(同类型)二者之间相差为sizeof(int)。对int来说相差为1,即4bit。
int *p = &b;
p[1] = 30或*(p+1) = 30; //该语句编译不报错,但是a输出的值仍是a,具体参考:https://blog.csdn.net/a3125504x/article/details/78835973
printf("%x",p[1]);
- 指针逻辑操作符
①跟一个特殊值记性比较 0x0:地址的无效值,结束标志。
if(p == 0x0)
NULL
②指针必须是同类型的比较才有意义
Linux学习---指针运算、修饰符(const、volatile、typedef)及、运算符(++、--、+、-)的更多相关文章
- Vue – 基础学习(4):事件修饰符
Vue – 基础学习(3):事件修饰符
- C++ 运算符 [] & *、操作符new 修饰符const inline virtual
1. [] 这让我想到静态分配内存和动态分配内存,与数据名称无关 局部变量和临时变量会储存在静态缓存区,随着程序运行完而消亡(例如在循环体中定义的局部变量随着循环体结束,局部变量也会消亡). 内存泄漏 ...
- 关于STM32库中 __IO 修饰符(volatile修饰符,反复无常的意思)
STM32例子代码中会有像这样的代码 static __IO uint32_t TimingDelay; 这里边的__IO修饰符不好理解,单从字面可以看出是为IO相关,查其标准库可以得知这个__IO ...
- STM32库中 __IO 修饰符(volatile修饰符)
STM32例子代码中会有像这样的代码 static __IO uint32_t TimingDelay; 这里边的__IO修饰符不好理解,单从字面可以看出是为IO相关,查其标准库可以得知这个__IO原 ...
- java学习(权限修饰符)
Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java 支持 4 种不同的访问权限. default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符.使用对象:类. ...
- Vue.js学习笔记之修饰符详解
本篇将简单介绍常用的修饰符. 在上一篇中,介绍了 v-model 和 v-on 简单用法.除了常规用法,这些指令也支持特殊方式绑定方法,以修饰符的方式实现.通常都是在指令后面用小数点“.”连接修饰符名 ...
- C#深入学习:泛型修饰符in,out、逆变委托类型和协变委托类型
在C#中,存在两个泛型修饰符:in和out,他们分别对应逆变委托和协变委托. 我们知道,在C#中要想将一个泛型对象转换为另一个泛型对象时,必须要将一个泛型对象拆箱,对元素进行显式或隐式转换后重新装箱. ...
- vue学习(六) 事件修饰符 stop prevent capture self once
//html <div id="app"> <div @click="divHandler" style="height:150px ...
- Linux学习 - 数值运算
1 declare 声明变量类型 declare [+/-] [选项] 变量名 - 给变量设定类型属性 + 取消变量的类型属性 -i 将变量声明为整数型 -x 将变量声明为环境变量(同export) ...
随机推荐
- linux xfs的一次io异常导致的crash
returned. [ blocked seconds.----这个默认是120,该环境上是被人为设置1200 [8556407.425653] "echo 0 > /proc/sys ...
- Ubuntu上部署tomcat后无法访问8080端口问题
在tomacat的bin目录下,修改startup.sh文件,添加信息: #set java environment export JAVA_HOME=/usr/java/jdk1.8.0_111 e ...
- Failed to introspect annotated methods on class 异常
用@enable时出现错误 Failed to introspect annotated methods on class 很可能是库和springboot版本不一致
- Java & C# BCD编码与十进制转换
using System;using System.Collections.Generic;using System.Text; namespace Base{ public class BCDHel ...
- nginx+ flume
nginx 作用: 做负载均衡 nginx和lvs的区别:nginx可以做反向代理 1.上传nginx安装包 tar -zxvf tengine-2.1.02.安装环境 依赖 gcc opens ...
- dotnet不是内部或外部的命令,也不是可运行的程序或批处理文件
该问题是由于电脑环境变量配置错误所导致.最初在网上查找的方法,是在系统环境变量path中添加以下语句: %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\ ...
- mysql判断表里面一个逗号分隔的字符串是否包含单个字符串、查询结果用逗号分隔
1.mysql判断表里面一个逗号分隔的字符串是否包含单个字符串 : FIND_IN_SET select * from tablename where FIND_IN_SET(传的参数,匹配字段) 例 ...
- Oracel递归查询start with ...connect by prior在Mysql中的实现
Oracle是一个强大的数据库,有很多的函数和语法可以带来很多便利,有些函数和语法在Mysql中有代替的,但是有些没有现成可用的方法,比如Oracle的递归,在Mysql中怎么实现呢? 例子: Ora ...
- python测试开发django-1.开始hello world!
前言 当你想走上测试开发之路,用python开发出一个web页面的时候,需要找一个支持python语言的web框架.django框架有丰富的文档和学习资料,也是非常成熟的web开发框架,想学pytho ...
- SpringMVC中注解@RequestBody和@ResponseBody的使用区别
首先上源码 在面试时经常会问到我们如何使用SpringMVC将Http请求转换为java对象,或者又是问如何将结果转换为java的呢? SpringMVC在接收到请求之后HandlerMapping像 ...