指针定义与运算
来源:互联网 发布:手机淘宝里的跳蚤街 编辑:程序博客网 时间:2024/05/29 15:07
引子:数据在内存中是如何存储的,又是如何读取的?内存编号就是内存的地址(内存中每个字节都有一个编号,即地址)
概念:
地址:内部存储器的编号,称为地址。如变量int a的位置编号,变量char b的位置都是指针。
指针变量:专门存放地址的变量称为指针变量。
地址、指针、指针变量都称为指针。
变量的地址(指针)和指向变量的地址变量(指针)
概念:
变量的指针: 就是变量的地址。
指针变量: 是用来存放地址的变量,普通变量是用来存放数据的,指针变量是存放地址的。
定义地址变量:
格式:[ 存储类型 ] 数据类型 *指针变量名;
int i, j;
int * pointer1, *pointer2;
存储类型是这个地址变量的存储位置
数据类型指的是这个地址变量指向的目标变量类型,不代表本身的类型大小。
指针变量的赋值:
方法一:
int a = 5; int *p = &a; //定义并初始化。
方法二:
int a = 5; int *p; p = &a;// 先定义后赋值。
指针变量引用
*和&符号
* 定义指针变量/取地址对应的变量的内容(间接访问);//i = 3直接,*p=3间接
& 取变量的地址。int a; &a, //&(&a);&a是地址,不可以对地址使用&
*和&互为逆运算。自右向左
引用
- 对指针变量赋值
p = &a;
- 引用地址变量指向的内容
printf( “a=%d\n”, *p );
- 引用变量本身的内容(即存储的地址)
printf(“%x\n”, p);
指针运算
指针运算就是地址运算,即指针变量中的地址作为运算量。
地址只能做算术、关系、赋值运算。
算术运算
px + n 代表指针向地址大的方向移动 n 个 数据。
移动后的地址量是: (px) + sizeof(px的类型) * n
px++ 指针变量向地址大的方向移动一个数据。
px - py 表示两个相同类型指针间相差数据的个数,而不是一个地址量。
px - py的结果是 (px - py) /sizeof(数据类型)
px + py 的结果? 没有任何意义
指针加发运算加的数值是增加地址本身类型的N倍大小(这在数组中访问经常用到)
关系运算
指针关系表示两个指针在内存位置的高低关系。
不同数据区域间的指针,关系运算没有意义。
指针和除0外的整数比较没有意义,和0比较可以判定指针是否为空。(标准写法为if (NULL == p) ).
赋值运算
向指针变量传递一个地址值。这个值是地址常量或指针变量(同类型),不能是普通整数(0可以表示空值)。
const/void指针
const 表示的使变量常量化,即不可修改。
int const a = 9;
a = 10; //报错,a为const修饰不可改变。
const 在遇到指针时会发生一些变化
const int a 与 int const a, const可以在int的左右位置。
void 型指针
指针变量指向不确定数据类型的变量的时候,可以定义为void型指针,
因为void类型指针可以赋值给其他任意类型的指针,而其他类型不能相互赋值.
如:malloc函数
void * malloc(size_t size);
malloc 函数因为不知道分配空间的具体用途,所以返回void型地址。
多级指针
指向地址变量的地址变量,称为多级指针(画图表示);
定义一个二级指针
int *p = &a;
int **q = &p;
小结:指针自增与自减
- p++(或 p+=1): 使p指向下一个元素
- *p++: ++与* 具有相同优先级且结合方向自右向左, 等价于*(p++), 先取*p的值,然后p再自加,指向下一个元素。
- *(p++) 与 *(++p) 作用不同。 前者是先取*p的值,再使p自加。后者先使p自加,再取自加后指向的内容。
- ++(*p): 表示将p指向的元素的值加1.
阅读全文
0 0
- 指针定义与运算
- 指针的定义及运算
- 函数指针、数组指针、字符串指针的定义形式与运算符举例、指针变量做函数参数用法
- 指针与位运算
- 指针与地址运算
- 指针与数组运算
- 二.指针的定义及运算
- 二.指针的定义及运算
- 宏定义与位运算
- 指针知识(一) 直接引用、指针定义、初始化、运算符
- 指针与数组定义小结
- C 指针阅读与定义
- 指针的定义与用法
- 指针的定义与含义
- 指针函数概念与定义
- 善用指针---指针定义与使用
- 关于定义一个指针与指针变量
- 指针操作符与运算
- 编码器与译码器
- 你应该要懂的宇宙真相——《给忙碌者的天体物理学 》上篇
- UILabel笔记
- 你不知道的Chrome开发者工具新功能
- 第14节:scala编程之集合
- 指针定义与运算
- leetCode之Add Two Numbers python实现
- Maximum Subarray Difference
- 导入表注入
- pytorch学习笔记(十四): DataLoader源码阅读
- VI编辑器基本使用方法
- 火车票购买系统模拟
- C#基础(16)——ArrayList
- 【机房收费系统】登录显示多步OLE DB 错误