精华内容
下载资源
问答
  • 常量可以赋值吗
    千次阅读
    2018-11-21 18:12:03

    C语言中除了初始化外,给字符串赋值的方法有memcpy、strcpy和sprintf。

    项目中将使用到的字符串定义为常量,然后试图用sprintf改变它的值,一直失败,后来定义改为字符数组就可以了。代码如下:

                char *str = "aaaa";
            	char chArray[] = "aaaa";
    
            	sprintf(str,"%s","bbbb");
            	sprintf(chArray,"%s","bbbb");
    
            	strcpy(str,"cccc");
            	strcpy(chArray,"cccc");
    
            	memcpy(str,"dddd",5);
            	memcpy(chArray,"dddd",5);

     上面的程序执行后,str一直保持为"aaaa",chArray则从aaaa到bbbb,到cccc,在到dddd变化。最后memcpy的长度为5,是因为字符串最后要有个'\0'。

    这是因为字符串常量保存在静态存储区,指针str是个局部变量,保存在栈内,它的内容就是静态存储区的地址。字符数组是个局部变量,保存在栈内,chArray是首个字符的地址。

     

    更多相关内容
  • 从零辅助篇1:java中常量赋值问题

    千次阅读 2021-02-08 14:35:19
    衔接:这里主要是针对从零开始学java系列第一季第五期:运算符和表达式中递增递减运算中的一个常量赋值说明 1、java中常量赋值问题 在java中,我们知道,一个整数默认为int类型,由此呢?我们引发出了一个问题?...

    衔接:这里主要是针对从零开始学java系列第一季第五期:运算符和表达式中递增递减运算中的一个常量的赋值说明

    1、java中常量的赋值问题

    在java中,我们知道,一个整数默认为int类型,由此呢?我们引发出了一个问题?
    byte类型为什么赋值一个整数不会报错

    下面我们来看一个例子:
    在这里插入图片描述

    同为byte类型的b1和b2的和却无法赋值给b3

    b5如果赋值一个整数不会报错,但加上一个byte类型的数却会报错

    对于b5,你可能还能解释:15默认为int类型,b1是byte类型,一个低级类型和一个高级类型进行运算,低级类型会自动向高级类型转换,那么b1+15的结果实际上是一个int类型的,那么也就无法赋值给byte类型的b5了

    那么,对于b3的同类型无法赋值和一个整数常量,明明默认是int类型,为什么却可以赋值给byte类型?

    针对上面的问题,我们先来看看b3处的报错信息:
    在这里插入图片描述

    • 它给我们的提示信息是类型错误,也就是说两个byte类型的数据相加之后的结果竟然变成了int类型;

    • 要了解清楚这个问题的原因,必须要从Java虚拟机的指令集说起,每种指令代表了一种操作。

    • 首先要说明的是:在Java虚拟机中,对于大部分与数据类型相关的字节码指令,他们的操作码助记符中都有特殊的字符来表示专门为哪种数据类型服务.
           但是Java虚拟机的操作码长度只有一个字节,这就带来一个问题,如果每种与数据类型相关的指令都支持Java虚拟机运行时数据类型的话,显然一个字节就不够用了。 所以Java虚拟机规范中,这种特性"Not Orthogonal",并非每种数据类型和每一种操作都有对应的指令。
           大部分的指令都没有支持byte、char、short,没有任何指令支持boolean类型。编译器在编译期或者运行期将byte和short类型的数据带符号扩展为相应的int类型数据,将boolean和char类型数据零位扩展为相应的int类型数据。与之类似的,在处理byte、char、short和boolean类型的数组时,也会转换成对应的int类型的字节码指令来处理。因此,大多数对于byte、char、short和boolean类型数据的操作,实际上都是使用相应的int类型作为运算类型的。
           参考书籍:《深入理解Java虚拟机:JVM高级特性与最佳实践》(第三部分,第6章,6.4.1小节:P197-P199 关于Java虚拟机指令集所支持的数据类型相关的内容)

    • 通俗来说:就是在java虚拟机中有一个字节码指令,这些指令中的操作码可以用来为某一种数据类型服务,但这些操作码只有一个字节的长度,当一个数据类型支持多个数据类型相关的指令的时候,那么一个字节肯定是不够用的,比如一个常量10,它即支持int,还支持byte、short。,这时候就会将它们扩展为相应的int类型,所以呢,byte+byte实际上结果为int类型!

    • 还有一种通俗的说法就是两个byte很容易超出byte所能存储的最大范围127,所以呢java虚拟机为其进行了数据类型转换。

    • 另外呢,对于为什么byte能赋值常量整数这个问题,我这里借鉴一下其他的文章
      首先,整数类型默认是int。这个毫无疑问。 其次,在允许的类型范围内,在此处byte:-128~127 而整数int 1 在这个范围,编译器会对常量自动进行向下的转化。 如果超出这个范围的常量,编译器直接报错。

    • 还有一点需要提的就是,对于递增递减运算符来说,比如byte b = 0;b++;对于这里的b++来说,JVM会自动帮我们对b+1的结果进行一个强制转换,byte类型也是可以使用递增递减运算符的

    引用资料:https://www.it1352.com/708803.html

    展开全文
  • milanlover2015-01-12 11:37严格意义上来讲,C语言并没有绝对的常量这个概念。const是一个C语言的关键字,它限定了一个变量不允许被改变。例如:下面代码#define N 10int main(){int arr[N]; //编译通过,因为这里N...

    7fc78c329024099698529734877d4967.png

    milanlover

    2015-01-12 11:37

    严格意义上来讲,C语言并没有绝对的常量这个概念。const是一个C语言的关键字,它限定了一个变量不允许被改变。

    例如:下面代码

    #define N 10

    int main()

    {

    int arr[N];  //编译通过,因为这里N被宏替换为10

    return 0;

    }

    但是,

    int main()

    {

    int const N =10;

    int arr[N]; //编译不通过,因为编译器认为N是个变量,不是常量。只不过这个变量不允许被修改

    }

    而且在C语言中被const修饰的就一定是常量吗?真的能不动如山吗?

    例如下面代码:

    const int a = 10;

    int *pa = &a;

    *pa = 20;

    printf("%d/n",*pa);

    printf("%d/n",a);

    编译时候,只是有个警告并没有错误,而且运行时,a的值也修改为20了。

    要真正保证不能修改a,代码修改如下:

    const int a = 10;

    const int *pa = &a; //或者int const *pa=&a;

    *pa = 20;

    printf("%d/n",*pa);

    printf("%d/n",a);

    -------------------------------------------------------------------------

    说这番话的目的想告诉大家,C由于是个比较原始古老的语言,在设计初考虑的不像C++,Java等这些语言严谨。对于常量在C中,其实没有严格意义上的常量类型。const的目的只是限定一个变量不允许修改,换句话说,它的值对这个符号来说是只读的,但是并不能防止通过程序的内部(或者说外部)的方法来修改这个值。所以,我可以简单理解为const是修饰的变量只是一个只读的变量而已。

    展开全文
  • 那变量value在准备阶段过后的初始值为0而不是123,因为这时候尚未开始执行任何Java 方法,而把value赋值为123的putstatic指令是程序被编译后,存放于类构造器()方 法之中,所以把value赋值为123的动作将在初始化...

    是的,而且是初始化为确定值,原文

    准备阶段是正式为类变量分配内存并设置类变量初始值的阶段,这些变量所使用的内存

    都将在方法区中进行分配。这个阶段中有两个容易产生混淆的概念需要强调一下,首先,这

    时候进行内存分配的仅包括类变量(被static修饰的变量),而不包括实例变量,实例变量将

    会在对象实例化时随着对象一起分配在Java堆中。其次,这里所说的初始值“通常情况”下是

    数据类型的零值,假设一个类变量的定义为:

    public static int value=123;

    那变量value在准备阶段过后的初始值为0而不是123,因为这时候尚未开始执行任何Java

    方法,而把value赋值为123的putstatic指令是程序被编译后,存放于类构造器<clinit>()方

    法之中,所以把value赋值为123的动作将在初始化阶段才会执行。表7-1列出了Java中所有基

    本数据类型的零值。

    上面提到,在“通常情况”下初始值是零值,那相对的会有一些“特殊情况”:如果类字段

    的字段属性表中存在ConstantValue属性,那在准备阶段变量value就会被初始化为

    ConstantValue属性所指定的值,假设上面类变量value的定义变为:

    public static final int value=123;

    编译时Javac将会为value生成ConstantValue属性,在准备阶段虚拟机就会根据

    ConstantValue的设置将value赋值为123。

    展开全文
  • 变量,在计算机技术领域里一般解释为:程序运行中可以进行更改、运算、赋值的量,而变量又可以大致分为局部变量和全局变量(当然,也可以按照类型分)。变量在程序中十分重要,如果一个程序缺少变量,那么他仅仅能...
  • php常量赋值

    2021-05-06 05:43:17
    123456789101112131415161718192021222324252627classmy{static$shengao="188";//my::$shengao="190";static$age="18";staticfunctionshengao(){echo"我的身高:".self::$shengao."";}staticfunctionage(){echo"我的...
  • 问题可以简述成如下代码,编译不会通过。。。。。编译错误提示:错误:不兼容的类型:Color无法转换为Transport(具体的语句不同有不同的错误提示)。。。。。。。enum A {...........}enum B {...........}A a;a = ...
  • 在本文中我们给大家图文整理了一篇关于探讨易语言常量的值不可以被改变的知识点内容,需要的朋友们跟着学习下。
  • Swift常量赋值

    2021-11-16 22:48:45
    1、常量只能赋值一次; 2、常量不要求你在编译时赋值,但是在使用之前必须赋值; 3、常量、变量在初始化之前都是不能使用的; let age :Int age=2 print(age)
  • DELPHI里面的技巧如何运行的时候给常量赋值
  • 传统C++有很大的限制,一般编译期,只能通过 宏定义、枚举、常量 来定义某些特定值,而新标准中,可以用关键字constexpr来通过常量表达式函数,给常量赋值; 先认识下,什么是常量表达式函数 和 非常量表达式函数: ...
  • PHP入坑之 赋值、变量和常量1年前阅读 1220评论 0喜欢 0###1、什么是赋值1、在PHP中,赋值主要有两种方式,分别为:`直接赋值` 和 `引用赋值`。2、直接赋值,就是在上述代码中已经出现过的场景,比如用 `=` 号,直接...
  • 定义枚举类型的时候,定义了枚举常量列表,例如: enum test { a, b, c }; ... 此时,枚举常量列表的值有如下的规则: ...注意:我们可以在定义常量列表的时候,给常量设置数值。程序测试例子如下: 程序运...
  • c++11已经不支持char* a="123";因为后者是字符串常量(就比如不能写int* a=1),一种替代方式是char* a=(char*)"123";会在内存中开辟一块新的区域存放"123",然后a指向这块新的区域。
  • 一、变量的声明和赋值 1、变量的声明和赋值用于将一个变量绑定到一个对象上,格式如下: 变量名 = 表达式 2、链式赋值:链式赋值用于同一个对象赋值给多个变量。 x=y=123 相当于:x=123; y=123 3、系列解包赋值:...
  • //使用const命名 重新赋值会报错(常量变量赋值) 因为const命名为常量 //定义一个对象时 let obj = { user:'1', name:'2' }; const obj2 = { user:'3', name:'4' }; obj2.name = 5; obj = 6; ...
  • 如何给静态常量赋值(final)

    千次阅读 2019-03-06 19:43:12
    倘若需要动态给这个常量赋值可以放在static程序块中。且最好放在一个单独类中。这样,其他的类,就可以把它当成静态常量访问。 例: public final class Constants { public static final String OS_ARCH=...
  • 1)常量数据成员,需要在构造函数列表中给出,构造函数中可以常量赋值,也可以实例化的时候赋值。 2)赋值函数中不能赋值,起到保护常量数据成员的作用,和友元作用相反。 2.常量成员函数,形式:type funname...
  • Java常量不能二次赋值常量不能修改值意思一样吗? 结论:不一样,Java常量不能二次赋值这种说法是对的,常量不能修改值这种说法是错误的 代码说明: 如图所示,在AGE = 12;处报错,假设常量不能修改值这种...
  • c++里给常量引用初始化赋值的类型不一致的时候,编译器会创建临时量,这个时候常量引用其实是引用的临时量,这个临时量我们是没法访问的。如果改变了被引用的变量的值,通过引用来输出的话还是输出原来的值(即临时...
  • 程序中常量在声明赋值后就无法改动其数据,常量赋值和变量的赋值上是基本一致,但是和变量赋值有点少许不一样。 常量声明的同时必须要赋值,否则会报错。 上面的话理解起来应该非常简单,就不说什么了,那么在...
  • }当我们需要给Configuration类中的CONFIG常量第一次使用时动态指定一个值时,而此时我们又不想去修改源代码,那我们有三种方法去实现这种需求。第一种:使用一个static静态代码块来指定,然后在静态代码块中,我们去...
  • 常量赋值给指针

    千次阅读 2019-09-20 13:28:07
    我的XCODE上,对指针的赋值语句不要求赋值号两边的类型一致,但数据出错,其它的编译器上我没试过,大家可以试试。为了实现我们的目的,需要进行"强制类型转换":p=(int*)&f; 如果有一个指针p,我们需要把它的...
  • 通过反射对常量赋值/取值

    千次阅读 2018-08-16 09:47:56
    当常量类中常量很多,而我们有不确定对其中哪些常量赋值的情况下,比如一个接收es查询返回的常量类。我们可能就需要反射来对常量赋值/取值 private final Class<?> stockClass = this.getClass(); ...
  • 2021-05-18 01:27阅读 11192回答{TSE}题: Traffic in Our Cities The volume of traffic in many cities in the world todaycontinues to expand. This causes many problems, including serious airpollution, ...
  • 静态代码块可以将在其之后出现的静态常量进行复制 比如底下这个例子,开始确实挺难理解的,觉得是肯定是static int m=100; 先执行,因为上面的静态代码块里m未定义类型,所以我特意将底下的定义类型给注释掉看结果 ...
  • 如题 zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz凑字数
  • VB程序设计初步 常量变量和赋值语句PPT课件.pptx
  • 一、C语言程序的基本结构 (一)安装C语言的编译器 Linux下C语言的编译器是gcc,以root用户登录,执行以下命令安装它: ...安装gcc编译器的前提条件是你的服务器必须可以访问互联网。 (二)C程序的基本结构
  • 枚举类型是否可以赋值

    千次阅读 2021-05-21 00:49:31
    枚举类型可以赋值,但其赋值不同于普通变量,主要为以下两点:1. 非枚举类型值赋值给枚举类型>需要借助类型强制转换>举例:typedef enum{Monday = 1, //将枚举类型的第一个变量置为1, 则后面的依次为2, 3, 4...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 426,417
精华内容 170,566
关键字:

常量可以赋值吗

友情链接: sp6ex19.rar