指针的使用以及指针的偏移(运算)
文章目录
目录
文章目录
前言
一.如何使用指针
二.指针的偏移(运算)
总结
前言
指针的使用以及指针的偏移(运算)的学习,以及一些易错点希望可以帮组大家理解
一.如何使用指针
首先定义一个指针变量,然后把变量地址赋值给指针、访问指针变量中可用地址的值。
例如:
#include <stdio.h>int main ()
{int a = 20; //实际变量的声明 int *p; // 指针变量的声明 p = &a; printf("a 变量的地址: %p\n", &a );//在指针变量中存储 a 的地址 printf("p 变量存储的地址: %p\n", p);// 在指针变量中存储的地址printf("*p变量的值: %d\n", *p ); //使用指针访问值 ,相当于输出a的值return 0;
}
二.指针的偏移(运算)
指针的每一次递增,它其实会指向下一个元素的存储单元。
指针的每一次递减,它都会指向前一个元素的存储单元。
指针在递增和递减时跳跃的字节数取决于指针所指向变量数据类型长度,比如 int 就是 4 个字节。
所以我们能够进行指针的算术运算。
例:
#include <stdio.h>int main ()
{int a = 20; //实际变量的声明 int *p; // 指针变量的声明 p = &a; //*后面跟的是那个变量的地址,*p代表的就是那个变量的本身printf("a 变量的地址: %p\n", &a );//在指针变量中存储 a 的地址 printf("p 变量存储的地址: %p\n", p);// 在指针变量中存储的地址,p的值就是a的地址printf("*p变量的值: %d\n", *p ); //使用指针访问值 ,相当于输出a的值printf("(*p)++的值: %d\n",(*p)++);//相当于a++printf("++(*p)的值: %d\n",++(*p));//相当于++aprintf("++*p的值: %d\n",++*p);//相当于++(*p),相当于++aprintf("*p++的值: %d\n",*p++);//相当于p++,*p,p=p+1=&a+1//由于*和++是同优先级的,且运算顺序是从右往左,所以先执行p++,再执行*p//但是p++是++后置,所以是先计算*p的值,再让p指向的地址偏移1个储存单元//但p偏移之后,它指向的地址就是不确定的地址,所以p变成了野指针。printf(" %d\n",*p);//此时p为野指针,输出一个错误的值return 0;
}
指针是一个用数值表示的地址。因此,可以对指针执行算术运算,可以对指针进行四种算术运算:++、--、+、-。
三.空指针与野指针
空指针:空就是void
#include <stdio.h>define NULL 0
int main ()
{int a = 0; //实际变量的声明 int *p; // 指针变量的声明 p = &a; //a的地址赋值给pp=NULL;//p=0,这时p为空指针,具有一个确定的值“空“,所以如下程序会报错int*p=NULL; printf(" %d\n", *p);return 0;
}
野指针:指向一个非法的或已销毁的内存的指针
int main ()
{int a = 0; //实际变量的声明 int *p; // 指针变量的声明 *p=20; //错误,此时p为野指针printf(" %d\n", a);return 0;
}
总结
以上就是本文章的内容,关于指针的进一步学习,希望能够帮助大家,指针相比于其他的内容比较难理解,但还是希望大家坚持学习。
指针的使用以及指针的偏移(运算)相关推荐
- Go基础:指针地址、指针类型、多重指针、指针运算
目录 到底什么是指针呢? 指针 指针地址和指针类型 指针取值 指针变量初始化 指针运算符 多重指针 指针运算 到底什么是指针呢? 内存就是一系列有序列号的存储单元,变量就是编译器为内存地址分配的昵称, ...
- C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)
1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...
- 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)
相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...
- 指针变量的声明、地址相关运算--“*”和“”
内存空间如何访问 我们使用的内存的基本存储单位是字节,一个字节由8个二进制位组成.每个字节都会按照一定的规则编号,这个编号就是该字节存储单元的地址.计算机就是利用这种编号也就是字节存储单元的地址来定位 ...
- 指针定义、指针与数组、指针运算、比较
目录 一.指针相关定义 二.数组与指针 1.数组变量是特殊的指针 2.指针与const a.所指是const时 b.const转化 c.const数组 三.指针运算 指针+1: *p++ 四.指针比较 ...
- pascal指针 c语言指针,Pascal中的指针运算指南(与C比较).doc
Pascal中的指针运算指南(与C比较) Pascal中的指针运算指南(与C比较) Pascal中的指针运算指南(与C比较) 大家都认为,c语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用 ...
- C语言-指针-基础用法、运算、指针与数组、指针数组、多级指针、void指针和const修饰符-学习笔记08
文章目录 1. 地址和变量 2. 指针 2.1 基本声明 2.2 指针的目标 3. 指针的运算 3.1 指针的赋值运算 3.2 指针的算术运算 3.2.1 指针与常量的加法与减法 3.2.2 两指针相 ...
- C指针4:数组指针(指向数组的指针)
先明确两个概念:(1和2是两个完全不一样的东西) 1.数组指针:如果一个指针指向了数组(该数组就是普通定义的数组),我们就称它为数组指针(Array Pointer).(1强调的是指针) 2.指针数组 ...
- c语言下标法与指针法,《C和指针》中关于指针与下标的问题
int array[10], 说明数组元素为整形. 取得a的值,并把它与整形的长度(也就是4)相乘,就是根据下标a,乘以4(整形量所占内存的字节数),所得结果就是下标变量相对数组起始位置的偏移,也就 ...
最新文章
- gdb相关(栈和寄存器)
- python可以自学吗-没有编程基础,可以自学Python吗?
- python限制输入长度_Python if语句问题,控制密码长度问题,求大神解救。
- 打印dog信息java_java – 打印arraylist元素?
- 复盘-电商产品「分类」功能迭代
- 计算机应用能力大纲,计算机应用能力水平考试大纲.doc
- spark之13:提交应用的方法(spark-submit)
- qq远程控制电脑方法_【技术分享】教你远程控制别人电脑
- Javascript Proxy对象 简介
- mapreduce程序开发的一些总结
- 最小生成树Kruskal算法+并查集检查连通
- 【CS231n_2017】1-Introduction to CNN for Visual Recognition
- mysql的find in set_mysql中find_in_set()函数的使用及in()用法详解
- 数据结构笔记(三)-- 链式实现顺序表
- Vue.js框架(二)
- Windows下VS2015编译caffe(CPU ONLY)
- 用计算机绘画教学反思,《电脑美术》教学反思范文
- 数组.列表.集合.应用
- Clickhouse Live View
- java国外著名网站