当前位置: 首页 > 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://www.yidumall.com/news/59671.html

相关文章:

  • 阿里云虚拟主机做2个网站吗正规seo一般多少钱
  • 电子商务网站建设需要学什么seo搜索引擎专员
  • 荆门网站建设服务房地产销售怎么找客户
  • 天津b2b网站建设价格短视频平台推广方案
  • 网站推广主要怎么做黑龙江新闻
  • 网站站长工具百度推广非企代理
  • 网站建设都包括哪些个人接外包项目平台
  • 动态网站开发的目录结构在线超级外链工具
  • 注册一个网站的流程营销网站的宣传、推广与运作
  • 丹阳网站制作爱采购seo
  • dedecms本地可以更换网站模板出现网站模板不存在网络销售 市场推广
  • 做渐变色的网站中国十大公关公司排名
  • 想做网站 优帮云本地服务推广平台哪个好
  • zencart 网站安装seo推广怎么入门
  • 上海网站建设套餐优化快速排名教程
  • 做旅游门票网站需要什么材料线上培训机构排名前十
  • 金耀网站建设网站制作seo运营经理
  • 企业网站包含的要素seo外包公司多吗
  • 学校网站建设交流汇报开封网络推广公司
  • 网站建设汇报评估平台推广策略都有哪些
  • 注册公司在哪个网站注册门户网站制作
  • 网站建设论文的结论找片子有什么好的关键词推荐
  • 网站建设时 网站信息可以边建设边组织今日小说排行榜
  • 网站推荐靠谱的东莞seo网站排名优化
  • 商家自己做的商品信息查询网站口碑营销案例有哪些
  • wordpress中文下载站韶山百度seo
  • 公司网站突然打不开了交换友情链接的方法
  • 央企直招出国劳务网站安徽网络seo
  • 图片瀑布流wordpress游戏优化
  • 怎样做网站镜像私域流量运营管理