首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++ sizeof()运算符参数指针和数组为什么不同

sizeof()参数指针和数组 C++或C语言中,都可以使用sizeof()运算符来计算数组字节大小,除此之外,在C++和C语言中,都可以使用一个指向数组第一个元素内存地址指针来引用数组,因此...,如果要计算数组字节大小,或长度,传递数组本身或传递指向数组指针给sizeof()运算符似乎都是可以,实际上则不然,二者有本质上区别。...和m不同!...这是为什么呢? 不同原因 这主要是因为当sizeof()运算符参数是数组本身,将计算是数组大小,而如果传递是指针作为参数,那计算便是指针大小,而不是整个数组。...来源:C++ sizeof()参数指针和数组区别 免责声明:内容仅供参考,不保证正确性。

13321

Java基础面试系列(二)

哈希算法强调,同一个对象哈希是唯一,这也就是没有重写equals方法之前,判断两个对象是否相等依据。...equals和hashcode关系 equals相同,但是hashcode不一定相同,此时两个对象必然不是同一个对象 hashcode相同,equals不相同,此时两个对象必然是同一个对象 为什么要有...这也就导致了原字符串更改以后仍然不变,因为其 地址发生了变化 为什么要将字符串设置 不可变。...ArrayList和LinkedList区别 都不安全,线程不同步 ArrayList底层是Object数组初始容量10,递增策略为1.5倍;LinkedList基于双向链表实现,本身存储了一个节点...此时线程T1需要新添加元素,并且该元素哈希与第一个节点和第二个节点哈希不同,此时需要扩容数组(为了方便,不考虑负载因子先。

56500
您找到你想要的搜索结果了吗?
是的
没有找到

Java基础面试题-可能读了个假书?

集合 ArrayList和LinkedList HashMap和HashTable HashMap底层实现 comparable和comparator 小结 Java基础 字符型常量字符串常量 字符常量是单引号引起一个字符...,字符串常量是双引号引起若干字符。...字符常量相当于一个整型,可以参加表达式运算,字符串常量代表一个地址。 字符常量只占2字节,字符串常量占若干字节。 重载和重写区别 重载:是同样一个方法能够根据输入数据不同,做出不同处理。...重载是同一个类中多个同名方法根据不同传参执行不同逻辑处理。 重写:是当子类继承自父类相同方法,输入数据一样,但是要做出和父类不一样响应时,就要重写父类方法。...对象存于堆内存,如果局部变量类型基本数据类型,那么存储在栈内存,如果引用数据类型,那存放是指向堆内存对象引用或是指向常量池中地址。

99850

C++基础语法重点总结

函数重载 说说什么是函数重载 函数重载指的是在同一个作用域中,声明了具有相同函数名函数,它们参数列表不同,也就是说参数类型不同,参数个数不同,参数顺序不同,返回不同都可以。...而C++在取名时候,是将函数名和参数类型首字符结合起来对函数取名,这样就可以区分函数不同了。 拓展:说说函数重载、函数重写、函数重定义区分: 在作用域中:函数重载在需要在同一个作用域中。...函数重载和函数重定义需要是函数名相同,参数列表不同,函数重写需要函数名相同、参数列表相同和返回相同(例外情况是协变和析构函数重写。协变是返回可以不同,但是返回必须是父子关系类指针或引用。...const还能用来修饰局部变量,修饰常量字符串,修饰指针和修饰函数参数和返回。 说一说修饰指针情况 const修饰指针,分有常量指针和指针常量。...{ 'a' };//sizeof==5 char类型数组内存大小 strlen计算来随机,因为没'\0' int str4[5] = { 'a' };//sizeof==20 int类型数组内存大小

19130

Java 基础面试总结

封装,通常认为封装是把数据和操作数据方法绑定起来,对数据访问只能通过已定义接口。 多态,多态性是指允许不同子类型对象对同一消息作出不同响应。 2....chenssy都是指向JVM字符串常量池中"chenssy"对象,他们指向同一个对象。...用new String() 创建字符串不是常量,不能在编译期就确定,所以new String() 创建字符串不放入常量池中,它们有自己地址空间。...元素哈希是通过元素 hashcode方法来获取, HashSet首先判断两个元素哈希,如果哈希一样,接着会比较 equals方法 如果 equls结果true ,HashSet就视为同一个元素...如果equals false就不是 同一个元素。

56220

深挖String

= new User("老王") 三个执行过程 (这里都是伪代码 带入更好理解) 这三个方法括号里面的是形式参数 (形参和实参是什么就不多说了 process1 给a赋值2 (注意实参a...等immutable类型因为没有提供自身修改函数,每次操作都是新生成一个对象以认为是传。...他们说是一个特殊例子是引用数据类型但是是传递,当然这样属于深挖字符串这篇文章中 而且符合地址传递这个说法 待我了解清楚后会放到下面的代码块 二、字符串常量池StringTable 堆和常量关系...jdk1.7之前 字符串常量池是存在于永久代中,至于什么是永久代 我也不知道 还没学习jvm知识 你只需要记住和堆没在一块儿 jdk1.7以后字符串常量池被放在堆中 如下图所示 (这里同一提醒一下...单线程下操作大量字符串用StringBuilder 虽然线程不安全但是不影响 多线程且操作大量字符串用StringBuffer String+是如何实现 +是java提供一个语法糖

19420

C - 指针C语言指针总结

C语言指针总结 1. 变量 不同类型变量在内存中占据不同字节空间。 内存中存储数据最小基本单位是字节,每一个字节都有一个内存地址,这个地址是一个十六进制数。...int *p1, * p2, * p3; 野指针 我们声明一个指针变量,如果没有为其初始化,那么这个时候这个指针变量中是有,是垃圾随机数。...如果一个指针变量是NULL,那么去访问这个指针指向变量时候一定会报错。 多个指针指向同一个变量,修改其中一个所有指针指向都会改变。因为多个个指针指向同一块地址。...当我们以字符指针形式要将字符串数据存储到常量时候,并不是直接将字符串存储到常量区,而是先检查常量区中是否有相同内容字符串,如果有,直接将这个字符串地址拿过来返回,如果没有,才会将这个字符串数据存储到常量区中...当我们重新字符指针初始化一个字符串时候,并不是修改原来字符串,因为原来字符串数据是不可更改,而是重新创建了一个字符串,把这个新字符串地址赋给他。建议使用字符指针来存储字符串数据。

4.2K81

江哥带你玩转C语言 | 04-C语言常量和变量

例如: .3、 .6f 指数形式 以幂形式表示, 以字母e或字母E后跟一个10幂数 上过初中都应该知道科学计数法吧,指数形式常量就是科学计数法另一种表 示,比如123000,用科学计数法表示...例如:‘a’、‘b’、‘c’ 字符常量单引号中只能有一个字符 特殊情况: 如果是转义字符,单引号中可以有两个字符。例如:’\n’、’\t’ 字符串常量 字符型常量都是用""(双引号)括起来。...例如:“a”、“abc”、“lnj” 系统会自动在字符串常量末尾加一个字符’\0’作为字符串结束标志 自定义常量 后期讲解内容, 此处先不用了解 常量类型练习 123 1.1F 1.1...同一个格子在不同时期不同人使用,格子中存储物品是可以变化。...一旦给变量指明了类型,那么这个变量就只能存储这种类型数据 内存空间极其有限,不同类型变量占用不同大小存储空间 为什么要指定变量名称?

53600

【进阶之路】Java代码性能调优(一)

2、常量池优化 当两个String对象拥有同一时候,他们都只是引用了常量池中同一个拷贝。所以当程序中某个字符串频繁出现时,这个优化技术就可以节省大幅度内存空间了。...4、intern方法 大多数情况,字符串是应用中占用内存最多一部分。虚拟机提供字符串池,用于存放公共字符串。...1、字符串变量和字符串常量equals时候将字符串常量写在前面 这一点很好理解,防止变量空出现空指针异常。...对集合优化,更多其实是在适合情况使用适合数据结构,与字符串不同,对于集合来说,不同数据结构之间差异是非常巨大。...JDKAPI对于RandomAccess接口解释是:实现RandomAccess接口用来表明其支持快速随机访问,此接口主要目的是允许一般算法更改其行为,从而将其应用到随机或连续访问列表时能提供良好性能

32930

Python中反人类直觉特性,你踩过坑吗?

字符串驻留是隐式,不受我们控制,但是我们可以根据一些规律来猜测是否发生字符串驻留: 所有长度 0 和长度 1 字符串都被驻留 字符串中只包含字母,数字或下划线时将会驻留。所以 'tom!'...'tom'将被驻留,而''.join(['t', 'o', 'm'])不被驻留 当在同一行将 a 和 b 设置 "tom!"...不是按照上面提到方式被隐式驻留). 它是一种编译器优化, 特别适用于交互式环境 当在同一行将 a 和 b 设置 "tom!"...这意味着在编译时表达式 'a'*20 会被替换为 'aaaaaaaaaaaaaaaaaaaa' 以减少运行时时钟周期. 只有长度小于 20 字符串才会发生常量折叠. 为什么呢?...如果操作符两侧变量指向同一个对象, 则 is not 结果 False, 否则结果 True.

1.1K10

Java中String类常见问题汇总

基本数据类型,根据类型不同,默认不同,比如int默认0,float默认是 0.0f **/ 4.字符串常量比较,字符串对象比较 package com.joshua317; public class...因为 String对象建立之后不能再改变,所以对于每一个不同字符串,都需要一个String对象来表示。...对于字符串常量,如果内容相同,Java认为它们代表同一个String对象。而用关键字new调用构造器,总是会创建一个新对象,无论内容是否相同。...至于为什么要把String类设计成不可变类,是它用途决定。其实不只String,很多Java标准类库中类都是不可变。...当然也有一些缺点,比如每个不同状态都要一个对象来代表,可能会造成性能上问题。所以Java标准类库还提供了一个可变版本,即 StringBuffer。

37710

再啰嗦最后一次,Java字符串是不可变

02、为什么 String 是不可变 重点来了啊,为什么 String 是不可变?原因可以从四个方面说起,缓存、安全性、同步和高性能。...因此,把字符串缓存起来,并且重复使用它们会节省大量堆空间(堆内存用来存储 Java 中对象,无论是成员变量、局部变量,还是类变量,它们指向对象都存储在堆内存中),因为不同字符串变量引用字符串常量池中同一个对象...字符串常量池是 Java 虚拟机用来存储字符串一个特殊区域,由于字符串是不可变,因此 Java 虚拟机可以在字符串常量池中只为同一字符串存储一个字符串副本来节省空间。...否则,可以使用 String 类提供 intern() 方法强制将当前字符串放入常量池中——常量池中查询不到当前字符串。...,所以两个不同变量都指向了池中同一字符串对象,从而节省了稀缺内存资源。

54420

再议String-字符串常量池与String.intern()

常量池就类似一个JAVA系统级别提供缓存。 8种基本类型常量池都是系统协调,String类型常量池比较特殊。...1.1.3 字符串常量池 在JDK6.0及之前版本,字符串常量池存放在方法区中,在JDK7.0版本以后,字符串常量池被移到了堆中了。至于为什么移到堆内,大概是由于方法区内存空间太小了。...字符串开辟一个字符串常量池,类似于缓存区 创建字符串常量时,首先查看字符串常量池是否存在该字符串 存在该字符串,返回引用实例,不存在,实例化该字符串并放入池中 实现基础 实现该优化基础是因为字符串是不可变...,可以不用担心数据冲突进行共享 运行时实例创建全局字符串常量池中有一个表,总是池中每个唯一字符串对象维护一个引用,这就意味着它们一直引用着字符串常量池中对象,所以,在常量池中这些字符串不会被垃圾收集器回收...我们可以利用池里String对象来做锁,实现对资源控制。比如一个城市某种资源同一时间只能一个线程访问,那就可以把城市名String对象作为锁,放到常量池中去,同一时间只能一个线程获得。

29220

通过示例学 Golang 2020 中文版【翻译完成】

声明常量 字符串常量 数字/整数/浮点常量 布尔常量 字符常量 多个常量声明 常量映射 常量结构 常量数组或切片 条件和循环 理解if-else语句 for循环 switch语句 Switch语句...文件手动下载依赖项 库版本或依赖项选择 从不同本地模块导入包 导入同一模块中包 go mod tidy做了什么 项目或模块添加依赖项 可执行和不可执行模块 用于go.mod文件中依赖项//...获取一个数绝对 圆周率 一个数平方根 一个数立方根 对数 余数或模数 把数字分成整数和分数部分 计算power(x, y) 检查数字是负数还是正数 两个数最小 两个数最大 随机 生成随机数...生成随机密码 选择数组或切片中随机元素 选择字符串随机字符 打乱字符串 打乱切片或数组 生成n个整数随机数组/切片 生成给定范围内数字 生成随机字符串 浮点 将字符串解析浮点 布尔...——完整指南 表示 DOB 获取 DOB 当前时间戳 时间/日期格式 时间转换 时间解析 两个时间时间差 获取不同时区的当前时间和日期 在不同时区之间转换时间 了解时间包中持续时间 时间加减 将

6.2K50

Java基础面试题整理「建议收藏」

“abc”这个字符串常量值会直接方法字符串常量池中,s1是对其引用.由于s2是个变量,编译器在编译期间无法确定该变量后续会不会改,因此无法直接将s3在编译器计算出来,因此s3是堆中”abc”引用...=s3.对于s4而言,其赋值号右边是常量表达式,因此可以在编译阶段直接被优化为”abc”,由于”abc”已经在字符串常量池中存在,因此s4是对其引用,此时也就意味s1和s4引用了常量池中同一个”abc...”.所以s1==s4.String中intern()会首先从字符串常量池中检索是否已经存在字面值”abc”对象,如果不存在则先将其添加到字符串常量池中,否则直接返回已存在字符串常量引用.此处由于...”abc”已经存在字符串常量池中了,因此s5和s1引用同一字符串常量....,因此最终s1和s2引用同一字符串常量对象.

39410

30道最常问Java基础面试题

字符型常量字符串常量区别****形式上:** 字符常量是单引号引起一个字符 字符串常量是双引号引起若干个字符**含义上:** 字符常量相当于一个整形(ASCII),可以参加表达式运算 字符串常量代表一个地址...(该字符串在内存中存放位置)**占内存大小上:** 字符常量只占一个字节 字符串常量占若干个字节(至少一个字符结束标志)**9....重载和重写区别****重载:** 发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回和访问修饰符可以不同,发生在编译时。   ...**线程安全性**String中对象是不可变,也就可以理解常量,线程安全。...(可以快速找到所需要对象)**为什么要有hashCode****我们以“HashSet如何检查重复”例子来说明为什么要有hashCode:**当你把对象加入HashSet时,HashSet会先计算对象

28210

2019年Java面试题基础系列228道(1),快看看哪些你还不会?

102、在没有使用临时变量情况如何交换两个整数变量? 103、接口是什么?为什么要使用接口而不是直接使用具体类? 104、Java 中,抽象类与接口之间有什么不同?...多态性:多态性是指允许不同子类型对象对同一消息作出不同响应。简单说就是用同样对象引用调用同样方法但是做了不同事情。多态性分为编译时多态性和运行时多态性。...如果将对象方法视为对象向外界提供服务,那么运行时多态性可以解释:当 A 系统访问 B 系统提供服务时,B系统有多种提供服务方式,但一切对 A 系统来说都是透明(就像电动剃须刀是 A 系统,...补充:我们编写类重写 hashCode 方法时,可能会看到如下所示代码,其实我们不太理解为什么要使用这样乘法运算来产生哈希码(散列码),而且为什么这个数是个素数,为什么通常选择 31 这个数?...intern 方法会得到字符串对象在常量池中对应版本引用(如果常量池中有一个字符串与 String 对象 equals 结果是 true),如果常量池中没有对应字符串,则该字符串将被添加到常量池中

1.1K00

再啰嗦最后一次,Java字符串是不可变

因此,把字符串缓存起来,并且重复使用它们会节省大量堆空间(堆内存用来存储 Java 中对象,无论是成员变量、局部变量,还是类变量,它们指向对象都存储在堆内存中),因为不同字符串变量引用字符串常量池中同一个对象...字符串常量池是 Java 虚拟机用来存储字符串一个特殊区域,由于字符串是不可变,因此 Java 虚拟机可以在字符串常量池中只为同一字符串存储一个字符串副本来节省空间。...否则,可以使用 String 类提供 intern() 方法强制将当前字符串放入常量池中——常量池中查询不到当前字符串。...所以两个不同变量都指向了池中同一字符串对象,从而节省了稀缺内存资源。...3)线程安全 由于字符串是不可变,因此可以在多线程之间共享,如果一个线程把字符串修改为另外一个,那么就会在字符串常量池中创建另外一个字符串,原有的字符串仍然会保持不变。

39331
领券