首页 > 其他分享 >关于指针问题的期末复习(1)

关于指针问题的期末复习(1)

时间:2024-09-03 20:49:52浏览次数:12  
标签:const 复习 int assert 地址 期末 指针 变量

可以去前面文章看看我的代码库哦,宝宝们

1. 内存和地址

 

内存单元的编号==地址==指针

2. 指针变量和地址

(&)-取地址操作符 

那我们通过取地址操作符(&)拿到的地址是⼀个数值,⽐如:0x006FFD70,这个数值有时候也是需要 存储起来,⽅便后期再使⽤的,那我们把这样的地址存储在指针变量中。  

 int a = 10;

int * pa = &a;

解引⽤操作符

 

 

3. 指针变量类型的意义

 指针的类型决定了对指针解引⽤的时候有多⼤的权限(⼀次能操作⼏个字节)。

⽐如: char* 的指针解引⽤就只能访问⼀个字节,⽽ int* 的指针的解引⽤就能访问四个字节。

 在指针类型中有⼀种特殊的类型是 void * 类型的,可以理解为⽆具体类型的指针(或者叫泛型指 针),这种类型的指针可以⽤来接受任意类型地址。但是也有局限性, void* 类型的指针不能直接进 ⾏指针的+-整数和解引⽤的运算。

4. const修饰指针

 被const修饰后,在语法上加了限制,只要我 们在代码中对n就⾏修改,就不符合语法规则,就报错,致使没法直接修改n。但是如果我们绕过n,使⽤n的地址,去修改n就能做到了,虽然这样做是在打破语法规则。

const修饰指针变量 

const如果放在*的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。 但是指针变量本⾝的内容可变。

 const如果放在*的右边,修饰的是指针变量本⾝,保证了指针变量的内容不能修改,但是指针指 向的内容,可以通过指针改变。  

5. 指针运算

指针的基本运算有三种,分别是:

• 指针+-整数

• 指针-指针

 • 指针的关系运算  

6. 野指针

野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的) 

1. 指针未初始化 

#include

int main()

{

int *p;//局部变量指针未初始化,默认为随机值

*p = 20;

return 0; } 

2. 指针越界访问 

 

 3. 指针指向的空间释放

指针变量不再使⽤时,及时置NULL,指针使⽤之前检查有效性 

7. assert断⾔

 assert.h 头⽂件定义了宏 assert() ,⽤于在运⾏时确保程序符合指定条件,如果不符合,就报 错终⽌运⾏。这个宏常常被称为“断⾔”。

assert(p != NULL);

上⾯代码在程序运⾏到这⼀⾏语句时,验证变量 p 是否等于 NULL 。如果确实不等于 NULL ,程序 继续运⾏,否则就会终⽌运⾏,并且给出报错信息提⽰。

assert() 宏接受⼀个表达式作为参数。如果该表达式为真(返回值⾮零), assert() 不会产⽣ 任何作⽤,程序继续运⾏。如果该表达式为假(返回值为零), assert() 就会报错,在标准错误 流 stderr 中写⼊⼀条错误信息,显⽰没有通过的表达式,以及包含这个表达式的⽂件名和⾏号。 assert() 的使⽤对程序员是⾮常友好的,使⽤ assert() 有⼏个好处:它不仅能⾃动标识⽂件和 出问题的⾏号,还有⼀种⽆需更改代码就能开启或关闭 assert() 的机制。如果已经确认程序没有问 题,不需要再做断⾔,就在 #include 语句的前⾯,定义⼀个宏 NDEBUG 。

8. 指针的使⽤和传址调⽤

strlen的模拟实现 

 

传值调⽤和传址调⽤ 

标签:const,复习,int,assert,地址,期末,指针,变量
From: https://blog.csdn.net/2402_86688931/article/details/141828464

相关文章

  • 结构体如何使用指针呢?两种方法,第一种是静态内存管理,不能用delete回收内存。第二种,使用
    问题描述:根据下列代码和结果回答下列问题。代码://Createdby黑马程序员.#include"iostream"usingnamespacestd;intmain(){structStudent{stringname;intage;stringgender;};//先创建一个标准的结构体对象(......
  • 《重生到现代之从零开始的C语言生活》—— 指针7
    sizeof和strlen的对比sizeofsizeof是一个操作符,计算的是所占据内存的大小,单位是字节sizeof操作符只关注内存的大小,不关心内存中存放的是什么数据strlenstrlen是C语言的库函数,头文件是string.h功能是求当中字符串字符中的个数strlen函数会一直找\0,当函数找\0字符时,就......
  • C语言初阶6 -指针
    指针是什么在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向pointsto)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元.那我们可......
  • C语言 解开你对“二级指针”的心结与恐惧
    今天Mr.狠人在这和大家分享二级指针,我们不用把二级指针想的天花乱坠非常困难其实二级指针就是一个指针的地址。我们用代码来辅助理解一下intn=10;int*pn=&n;//pn是一个一级指针变量//pn指向n,指针变量也是一个变量现在我们有了n的地址,并且......
  • C语言指针的进阶理解——指针数组
    //整型数组 //顾名思义是存放整型类型的元素的数组 intarr1[]={1,2,3,4,5};//arr内元素的类型是int //字符数组 //顾名思义是存放字符类型元素的数组 chararr2[]={'a','b','c'};//arr内元素的类型是char那么指针数组你是不是也能推算出来它大概的模样了,差不......
  • 468. 简单的水果主题网页 大学生期末大作业 Web前端网页制作 html+css
    目录一、网页概述二、网页文件 三、网页效果四、代码展示1.html2.CSS五、总结1.简洁实用2.使用方便3.整体性好4.形象突出5.交互式强六、更多推荐欢迎光临仙女的网页世界!这里有各行各业的Web前端网页制作的案例,样式齐全新颖,并持续更新!感谢CSDN,提供了这么好......
  • MySQL复习2
    高级查询准备createdatabasegreatselect;usegreatselect;droptableifexists`class`;createtable`class`(`cid`int(11)notnullauto_increment,`caption`varchar(32)notnull,primarykey(`cid`))engine=innoDBAUTO_INCREMENT=5de......
  • 常量指针与指针常量
    1.常量指针当const修饰指针时,我们称其为常量指针特点:指针指向地址可以改,指针指向的值不可更改语法:const数据类型*指针变量名记忆方法:常量指针为常量的指针,重点在常量上,常量为不可更改的值,但地址可改例子inta=10;intb=10;constint*p=&a;//指针指向的值不......
  • 大学生WEB前端HTML网页期末作业,动漫资讯静态html网站—动漫网站模板
    网站简介网站主题动漫新闻资讯html网站,一共6个页面,分别首页、动漫资讯、新闻资讯、联系我们、登录注册页面网站使用div+css布局页面,网站使用div,ul,li,a,p,h1,h2,h3,h4,form,input,button等标签,css使用margin,border,padding,font-weight,font-family,color,width,line-height,overf......
  • C语言指针(进阶内容)
    目录1.指针的基本概念:2.不同类型的指针的意义是什么?3.野指针是什么?4.指针加减整数 5.指针运算(指针-指针)6.一级指针和二级指针以及多级指针是什么意思?7.指针数组8.数组指针9.函数指针1.指针的基本概念:1.指针就是个变量,用来存放地址,地址唯一标识一块内存空......