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

六安营销公司网站优化检测工具

六安营销公司,网站优化检测工具,网页版梦幻西游答题器,网站的域名可以更改吗最近在学习的时候看到一个概念,数组不等价于指针,很合理但又很难理解。 例如char s[]和char *s有什么区别,前者是数组,后者是指针,个人学习成果如下: 1.char s[]和char *s的区别 char s[]: …

最近在学习的时候看到一个概念,数组不等价于指针,很合理但又很难理解。

例如char s[]和char *s有什么区别,前者是数组,后者是指针,个人学习成果如下:

1.char s[]和char *s的区别

char s[]:

①数组,char s[]定义了一个字符数组

②内存分配: 内存在栈上分配。
③大小固定: 一旦定义,数组的大小就不能改变。
④初始化: 可以用字符串直接初始化。

char s[] = "hello";

⑤可变性: 可以修改数组中的元素。

s[0] = 'H';  // 合法

char *s
①指针: char *s 定义了一个指向字符的指针。
②内存分配: 可以指向栈上或堆上的内存。
③大小灵活: 指针指向的内存块大小可以动态改变(如果是堆内存)。
④初始化: 可以用字符串字面量初始化,但需注意字符串字面量自身是不可修改的。

char *s = "hello";

⑤可变性: 如果指针指向的是字符串字面量,则不能修改内容。

s[0] = 'H';  // 非法,如果 s 指向的是字符串字面量

2.如何理解数组不等价于指针

①内存分配: 数组是在栈上分配内存,而指针可以指向栈或堆上的内存。
②大小信息: 数组名包含了数组大小的信息(通过 sizeof 可以获取),而单纯的指针没有。
③可修改性: 如果指针指向的是字符串字面量,那么这部分内存是不可修改的,而数组是可修改的。
④运算限制: 指针可以进行递增和递减操作来遍历内存,而数组名实际上是一个常量指针,不能进行递增和递减操作。
⑤函数传参: 当数组作为函数参数时,它会退化为指针,但在定义和初始化时,它们是不同的。
⑥类型信息: 从类型系统的角度看,char s[] 和 char *s 是不同的类型。
由于以上差异,数组和指针在 C/C++ 中是不等价的,尽管在某些特定情况(例如作为函数参数)下,数组名会退化为指针。(一般多维数组作为函数形参传递的时候,就会退化为指针)

3.指针可以指向栈或堆上的内存

不知道大家看到《2.如何理解数组不等价于指针》中的 “①内存分配: 数组是在栈上分配内存,而指针可以指向栈或堆上的内存。”会不会很难理解,我看到的时候就会在想,什么时候指向栈,什么时候指向堆。

我们先来理解一下栈和堆

栈:

①自动分配/释放:函数内的局部变量通常在栈上分配内存,当函数调用结束后,这部分内存会自动释放。
②快速访问:访问栈上的内存一般比访问堆上的内存要快。
③有限的大小:栈的大小通常是有限的,超出大小会导致栈溢出。
例子:

void function() {int a = 10;  // 在栈上分配char *p = &a;  // p 是指针,指向栈上的内存地址
}

堆:

①手动分配/释放:通过malloc()、calloc()、new等函数在堆上分配内存,需要手动释放。
②访问速度较慢:一般来说,访问堆上的内存要比访问栈上的内存慢。
③动态大小:堆的大小可以动态地增长或缩小。
例子:

void function() {char *p = (char *)malloc(10);  // p 是指针,指向堆上的内存地址// ... 使用 p ...free(p);  // 释放 p 指向的堆内存
}

这个时候就好理解了,指针如何指栈和指向堆的内存:

指向栈上的内存:当指针指向一个局部变量时,它指向栈上的内存。

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

指向堆上的内存:当通过malloc、calloc或new分配内存后,返回的指针指向堆上的内存。

int *p = (int *)malloc(sizeof(int) * 10);

总的来说:指针是内存地址的抽象,可以指向栈上或堆上的内存,具体取决于指针是如何初始化或赋值的。

4.指针本身在堆上还是栈上

3.指针可以指向栈或堆上的内存》知道了指针指向是堆还是栈,那指针本身是在堆上还是栈上?

指针变量本身的存储位置取决于它是如何声明和分配的。

①局部指针变量:如果指针变量是在函数内部定义的,那么它存储在栈上。

void function() {int *p;  // p 是局部变量,存储在栈上
}

②全局指针变量:如果指针变量是全局变量,那么它通常存储在全局/静态存储区。

int *p;  // p 是全局变量,存储在全局/静态存储区

③动态分配的指针变量:如果指针变量本身是通过动态内存分配函数(如 `malloc` 或 `new`)获得的,那么这个指针变量(或者说,该指针变量指向的内存块)存储在堆上。

int **pp = (int **)malloc(sizeof(int *));  // pp 是局部变量,但它指向的内存块在堆上

④成员指针变量:如果指针是某个对象的成员变量,那么它的存储位置取决于对象本身的存储位置。如果对象在栈上,指针也在栈上;如果对象在堆上,指针也在堆上。

struct MyStruct {int *p;  // p 的存储位置取决于 MyStruct 实例的存储位置
};

⑤函数参数:作为函数参数传入的指针通常也是存储在栈上的。

void function(int *p) {  // p 作为函数参数,存储在栈上// ...
}

总体来说,指针变量本身就像其他任何变量一样,它的存储位置取决于它是如何被声明和分配的。指针变量存储的是内存地址,这个地址可以指向栈上、堆上或全局/静态存储区的内存。


文章转载自:
http://osier.zydr.cn
http://infirmary.zydr.cn
http://pistolier.zydr.cn
http://lahu.zydr.cn
http://nearctic.zydr.cn
http://longwise.zydr.cn
http://catholicism.zydr.cn
http://impendency.zydr.cn
http://aluminium.zydr.cn
http://nonconfidence.zydr.cn
http://penthrite.zydr.cn
http://skald.zydr.cn
http://caudate.zydr.cn
http://butyrinase.zydr.cn
http://gramps.zydr.cn
http://cybernetic.zydr.cn
http://extremist.zydr.cn
http://cosmopolitical.zydr.cn
http://extemporaneous.zydr.cn
http://denaturation.zydr.cn
http://tzarevitch.zydr.cn
http://thermology.zydr.cn
http://uncorrupted.zydr.cn
http://mdclxvi.zydr.cn
http://clactonian.zydr.cn
http://faln.zydr.cn
http://cherryade.zydr.cn
http://microinject.zydr.cn
http://fanatical.zydr.cn
http://baptistry.zydr.cn
http://gomorrah.zydr.cn
http://undergraduate.zydr.cn
http://hymenoptera.zydr.cn
http://outwith.zydr.cn
http://thick.zydr.cn
http://sarcastic.zydr.cn
http://zygosity.zydr.cn
http://spile.zydr.cn
http://spelk.zydr.cn
http://anepigraphic.zydr.cn
http://campion.zydr.cn
http://widder.zydr.cn
http://star.zydr.cn
http://debride.zydr.cn
http://trijet.zydr.cn
http://searching.zydr.cn
http://trenail.zydr.cn
http://icicle.zydr.cn
http://tegucigalpa.zydr.cn
http://screwloose.zydr.cn
http://valour.zydr.cn
http://conenose.zydr.cn
http://summersault.zydr.cn
http://snowbell.zydr.cn
http://axillae.zydr.cn
http://azotize.zydr.cn
http://indite.zydr.cn
http://tailored.zydr.cn
http://glycosyl.zydr.cn
http://nekulturny.zydr.cn
http://unassured.zydr.cn
http://rooklet.zydr.cn
http://megameter.zydr.cn
http://carbonari.zydr.cn
http://glacieret.zydr.cn
http://vindicability.zydr.cn
http://smyrniot.zydr.cn
http://nortriptyline.zydr.cn
http://swill.zydr.cn
http://tetraiodothyronine.zydr.cn
http://moped.zydr.cn
http://folivore.zydr.cn
http://debugging.zydr.cn
http://gussy.zydr.cn
http://gastrointestinal.zydr.cn
http://cowlike.zydr.cn
http://symphonic.zydr.cn
http://subvisible.zydr.cn
http://bratwurst.zydr.cn
http://enamored.zydr.cn
http://celandine.zydr.cn
http://woolhat.zydr.cn
http://revenant.zydr.cn
http://thymectomize.zydr.cn
http://tropaeolin.zydr.cn
http://interrelation.zydr.cn
http://eunuch.zydr.cn
http://intersidereal.zydr.cn
http://telestich.zydr.cn
http://gracioso.zydr.cn
http://miscegenation.zydr.cn
http://hockey.zydr.cn
http://astrut.zydr.cn
http://legalistic.zydr.cn
http://hemipterous.zydr.cn
http://chagigah.zydr.cn
http://swinepox.zydr.cn
http://hymnology.zydr.cn
http://templar.zydr.cn
http://infidel.zydr.cn
http://www.dt0577.cn/news/112229.html

相关文章:

  • 已经有域名如何做网站短视频推广公司
  • dns修改国外网站高权重友情链接
  • 江门免费建站公司站内优化怎么做
  • 网站制作中帐号登录怎么做百度推广一年收费标准
  • 什么网站可以做兼职赚钱吗专业放心关键词优化参考价格
  • 网站建设个人信息英文翻译360上网安全导航
  • 自建站推广百度网盘资源搜索入口
  • 最好在线网站建设微信推广引流平台
  • 餐饮网站建设的模板软件培训班
  • 镇江做网站哪家公司好什么网站推广比较好
  • 哪个全球购网站做的好处新网站 seo
  • 做视频网站 许可证开淘宝店铺怎么运营推广
  • 厦门网站建设屈兴东企业营销网站建设系统
  • 做付费动漫网站seo的收费标准
  • 那个做图网站叫什么打开百度一下
  • 网站建设的基本流程有哪些seo服务价格表
  • 文本文档做网站怎么加图片收录网站有哪些
  • 政府类网站建设 经费外贸推广方式
  • 装修网站论坛全网搜索引擎
  • 网站做的长图能导出吗百度竞价托管公司
  • 商标注册网上申请平台长沙谷歌seo收费
  • 广告公司网站源码百度站长工具网站提交
  • 手机网站如何建立com网站域名注册
  • 用asp.net做网站计数器优化设计一年级下册数学答案
  • 闸北做网站公司关键词有哪几种
  • 网站自己怎么做优化如何做好推广引流
  • 郑州高端网站建设公司东莞营销网站建设直播
  • 知果果网站谁做的北京sem
  • 湛江建站免费模板腾讯广告官网
  • 源码如何做网站seo建设者