当前位置: 首页 > news >正文

什么做自己的网站文职培训机构前十名

什么做自己的网站,文职培训机构前十名,网站内容的作用,WordPress不发邮件了前言 在“走进指针世界(上卷)”中,我们已经说过:什么是指针、内存和地址,指针的使用、声明、初始化,取地址运算符、解引用运算符以及这两者关系,还有指针赋值。 在正式使用指针进行各种代码的…

前言

在“走进指针世界(上卷)”中,我们已经说过:什么是指针、内存和地址,指针的使用、声明、初始化,取地址运算符、解引用运算符以及这两者关系,还有指针赋值。

在正式使用指针进行各种代码的编写之前,在这篇“走进指针世界(下卷)”里,让我们再了解一些指针的重要的前置知识吧。

指针变量的大小

指针变量有大小吗? 答案是有的。我们知道,sizeof是一个操作符, 其作用是返回一个对象或类型所占的内存字节数。就像整型变量、字符型变量等可以用sizeof计算大小一样,指针变量也可以这样计算大小:

#include<stdio.h>int main()
{int a = 10;int* p = &a;printf("%zd\n", sizeof(p));return 0;
}

在vs2022的x86(32位环境)下我们可以得出这样的运行结果:

如果改成x64(64位环境),就是这样的运行结果:

 所以我们知道指针变量p的大小就是4或8个字节。

指针变量大小与指向类型的关系:

p是指向整型变量的指针变量,那指向字符型变量的指针变量有多大呢?我们可以再用同样的方式进行观察:

char a = 'a';
char* p = &a;
printf("%zd\n", sizeof(p));
return 0;

x86(32位环境)下结果:

x64(64位环境)下结果:

可以看到指向字符型变量的指针变量的大小同样是4或8个字节。我们可以继续去观察指向其他类型变量的指针变量的大小,最终会发现都是4或8个字节(取决于环境)

为什么呢?

明白这个问题我们必须知道地址是怎么产生的。

计算机中的编址,是通过硬件设计完成的。

计算机中有很多的硬件单元,硬件单元之间互相协同工作,而协同工作需要相互之间能够进行数据传递。硬件之间相互独立,它们的通信方式是用“线”连起来。CPU和内存之间有大量的数据交互,所以这两者也用线连起来。

32位机器有32根地址总线,每根线只有两态,表示为0或1(电脉冲有无),那么一根线可以表示两种含义,32根线就可以表示2^32种含义,每种含义可以表示一个地址。

既然把32根地址线产生的2进制序列当作一个地址,那么一个地址就是32个bit位,需要4个字节来存储。所以,指针变量的大小就是4个字节。 

在这个分析的过程中,我们可以看出,指针变量的大小与该指针指向的数据类型确实是无关的,只与是32位环境还是64位环境有关。

指针变量类型的意义

既然指针变量的大小都是4或8个字节,那么你可能会好奇指针变量类型的意义在哪呢?现在我们就来了解一下指针变量类型的意义。

对于解引用的意义:

第一个方面的意义在于解引用,指针类型的意义决定了在对指针解引用时有多大的权限,或者说一次能操作几个字节

*pa=0之后: 

从内存窗口我们可以看出,在对指向int类型的指针变量pa解引用并赋值0时,我们把4个字节(00为一个字节)都该为了0。

如果将同样的动作施加于一个指向char类型的指针变量,会发生什么?

*pa=0之后:  

可以看到,我们只能操作一个字节。

 所以当指针变量指向的类型不同,即指针变量的类型也不同时,解引用的权限可能是不同的。

对于指针加减整数的意义:

指针变量的类型还决定了指针加减一个整数时,实际移动的字节数。或者通俗点说,指针向前或向后走一步有多大距离。

我们在vs的x86下,用%p打印观察地址。发现同一个整型变量,我们用两个不同类型的指针存储它的地址,在加1后地址的变化不相同。我们知道一个内存单元为1个字节,每个字节有自己的编号即地址,所以pa+1加了4个字节,而pc+1加了1个字节。

其实,pa+1时,加的并不是整数1,而是1*sizeof(int),pc+1时,加的是1*sizeof(char)。 

void*指针

有一种特殊的指针类型,void*指针,也就是无具体类型的指针,也叫泛型指针。

这种指针有其优缺点。

优点: 

它的优点就是既然是泛型指针,在接收一个地址的时候无需局限于某个类型的地址,可以把任意类型数据的地址交给它。比如下面这个代码是合法的:

int a = 10;
void* p = &a;

当我们遇到不知道具体类型的地址又需要用指针存储时,void*指针就可以派上用场。

缺点:

但是它也有自己的缺点,就是无法直接进行指针的加减整

数运算和解引用运算,因为它不知道要操作几个字节。

int a = 10;
void* p = &a;
printf("%d\n", *p);//会报错

const修饰指针

有时,我们不希望指针指向的内容被修改,那么我们就可以使用const对其进行修饰。

还记得const的用法吗?

int a = 100;
a = 200;

在这个代码中,我们把a的值改变了。

​
const int a = 100;
a = 200;//会报错

而我们用const修饰变量a时,a变成了“常变量”,本质上还是个变量,但是不能被修改。

那么现在我们再看一个代码:

我们用const修饰变量n的声明时,我们本意是希望n的值不会被修改,而通过指针我们却间接改掉了变量n的值,那么我们怎样才能达到我们的预期呢?

 

当我们在指针变量p的声明时用cconst进行修饰,就无法再通过刚才的方式修改n的值,而是会报错了。

const与*的前后关系

 在声明一个指针变量并想要用const进行修饰时,我们需要注意的一点是const和*的先后关系。因为当const放在*前面时,无法被修改的是指针指向的内容,当const放在*后面时,无法改变的是指针的指向:

注意,const放在*前面时,在int前还是后都是一样的效果:

 

而当const放在*后面时,才会有根本的改变:

还有一种情况,当我们在*的前后都放上const,那就变成了指向和指向的内容都无法修改:

 

总之,可以根据我们不希望被修改的内容来决定const的用法,并且在需要使用const的时候不要吝啬使用,因为它可以在我们不小心修改了不应该修改的内容时及时给出警告。 

那么,到此为止,“走进指针世界”就结束了,后面我还会持续更新指针相关的更多内容,希望大家发现错误可以向我指正^_^

http://www.khdw.cn/news/3399.html

相关文章:

  • 做暧在线网站如何在网上推广自己的产品
  • 爱站网关键词密度抖音推广怎么做
  • 网页qq邮箱怎么发文件免费网站seo排名优化
  • 用html做网站的心得体会中级经济师考试
  • 重庆那家做网站做得好郑州seo技术顾问
  • 学做面包的网站广州网站设计实力乐云seo
  • 网站建设找哪家好天津seo推广软件
  • html5网站特点独立网站和平台网站
  • 宁波建设监理协会网站网站怎么制作
  • 培训公司网站建设seo权重优化软件
  • 建站之星平台品牌推广的方式有哪些
  • 网站开发背景 目的湖南seo服务电话
  • 移动课程播放网站建设多少钱网络营销师
  • 网站建设的资料的准备免费建站网站大全
  • 数字广东网络建设有限公司网站中国十大seo公司
  • 顺德网站建设价格惠州优化怎么做seo
  • 建网站外包西安seo外包服务
  • 资阳优化团队预订南昌关键词优化软件
  • 网站推广方案设计企业营销推广怎么做
  • 如何设计一个高端网站简洁大方大气关键词采集软件
  • 进行公司网站建设方案公司注册流程
  • 网站备案名称重复seo课程在哪培训好
  • 鄄城住房和城乡建设局网站百度识图搜索引擎
  • 拿了网赌代理后怎样做自己的网站哈尔滨优化网站公司
  • 注册网站代码百度收录查询方法
  • 网站seo应用北京网讯百度科技有限公司
  • 秦皇岛网站建设公司营销案例100例简短
  • 大良营销网站建设平台东莞网站推广哪里找
  • 夹江网站建设搜索网
  • 做网站点击挣钱不?幽默广告软文案例