精华内容
下载资源
问答
  •  那么在第一步的时候就使用C风格字符串的判断长度方法,判断这个"\0\0\0"的长度0  - - 所以这样的初始化得不到我想要的结果   */ } 而 string ( int count, char ch) 则能得到想要表达STL的string不把 ' \...

    C++标准库的string不是以'\0'结束,而是string类中有一个记录长度的值
    (具体怎么实现我不是很清楚,要等看过STL代码或者比我牛的大牛来给你说)
    但是C
    ++中的string你要得到它有多长,可以这么做
    string str("abc");
    str.size();
    str.length();
    //都返回3

    而且,str中不会以
    '\0'判断字符串结束,可以这样
    string str2("\0\0\0\0\0");
    str2.size();
    //等于5

    如果要用string返回一个C style
    string
    那么可以
    str.c_str();
    //会在字符串内容后加上一个C style string 的结束符号'\0' 这里返回的就是 "abc\0"
    str.data(); //这里返回的是 "abc"

     

     

     

    嗯,我错了,但是我在看书的时候怎么是这么写的
    我找找看

    C++
    Standard Library : A tutorial and Reference
    中11.1章
    Unlike C
    -strings, objects of class string have no special character '\0' at the end of the string.

    Note that only the single
    -argument version char* handles the character '\0' as a special character that terminates the string. In all other cases '\0' is not a special character:

        std::
    string s1("nico");        //initializes s1 with: 'n' 'i' 'c' 'o'
        std::string s2("nico",5) ;     //initializes s2 with: 'n' 'i' 'c' 'o' '\0'
        std::string s3(5,'\0');        //initializes s3 with: '\0' '\0' '\0' '\0' '\0'

        s1.length()                    
    //yields 4
        s2.length()                     //yields 5
        s3.length()                     //yields 5

    噢~~~ 是我错了,想这样初始化就对了~
    std::
    string s3(5,'\0');        这样s3 就是 "\0\0\0\0\0"

    我那样初始化的确是错的,而且我大概知道错在哪里了~ 想想看~
    想好了再跟个贴

    C/C++ code
    嗯,错在初始化方法相关 string str("\0\0\0"); 这里调用的是 string(const char* p) 这个构造函数 这个构造函数的实现应该是依赖C style string的,我大概用自己的想法描述下 string::string(const char* p) {   /*   将string内部的char* mp申请一个p指向的C风格字符串的长度的空间   将p的内容COPY到mp中   那么在第一步的时候就使用C风格字符串的判断长度方法,判断这个"\0\0\0"的长度是0   - - 所以这样的初始化得不到我想要的结果   */ } 而 string(int count,char ch) 则能得到想要表达STL的string不把'\0'做特殊字符处理的意思
    展开全文
  • 3.关键字中有两个保留字 goto const,即当前版本不可用,什么时候启用还未知。 标识符 概念:用来给类、方法、接口、常亮、变量、枚举等起名字的字符序列。 组成部分: 1.所有大小写字 2.数字0-9 3.特殊字符$和_ 4...

    变量和数据类型

    注释

    单行注释:// 可以嵌套
    多行注释:/* */ 不可以嵌套
    文档注释

    关键字

    概念:java中被赋予了特殊含义和特殊功能的英文单词叫做关键字。
    特点:
    1.全是小写
    2.标识符命名时不能与关键字重名
    3.关键字中有两个保留字 goto const,即当前版本不可用,什么时候启用还未知。

    标识符

    概念:用来给类、方法、接口、常亮、变量、枚举等起名字的字符序列。

    组成部分:
    1.所有大小写字
    2.数字0-9
    3.特殊字符$和_
    4.不常用的一些字符,如其他语言的字符

    命名注意事项:
    1.不能使用关键字和保留字
    2.数字不能开头
    3.见名知意
    4.区分大小写

    JAVA的命名规则

    包:公司域名倒置
    类和接口:每个单词首字母大写(大驼峰规则)
    方法、变量:单词所有字母小写,若有多个单词组成,从第二个单词开始首字母大写
    常量:单词所有字母大写,若有多个单词,相邻单词之间用下划线隔开

    常量与变量

    常量:程序运行过程中其值不会改变
    按表现形式分:
    1.字面值常量:如12、526
    2.符号常量:PI
    按数据类型分:
    基本数据类型常量:整数类型、小数类型、字符常量、布尔类型
    引用数据类型:
    1.字符串常量:用""括起来的字符序列
    2.空常量:null,代表一个占位符,引用不指向任何地址

    变量:即内存中的一块数据存贮单元。
    定义:变量的数据类型 变量名=变量值

    数据类型

    1.基本数据类型(简单数据类型)
    整数类型:byte 1B
    short 2B
    int 4B
    long 8B 字面值如果超出int范围,数据后要加l或L
    小数类型:float 4B 字面值数据后要加f或F
    double 8B 字面值数据后可以加d或D
    字符类型:byte 2B
    整数类型:byte 不详

    2.引用数据类型:无数种(面向对象)

    拓展题目

    1.a = 100,  b = 200, 编程将两者交换
    public class Demo1 {
    	public static void main(String[] args) {
            int a = 100;
            int b = 200;
            int c = a;
            a = b;
            b = c;
            System.out.println(a);
            System.out.println(b);
        }
    }
    
    2.下列选项能作为标识符的是(CEA.boolean------关键字  
        B.23age-------数字不能开头
        C._id
        D.my name------不能有空格
        E.$this_is_a_long_variable_name
    
    3.floatint都占4个字节,那么两者为什么存储数据的范围不同,谁更大一 些,谁更精确?
    答:因为int类型是以二进制形式保存,而float类型是以指数形式保存,float更大一些,但是int更精确。
    
    展开全文
  • 变量

    2010-12-29 10:56:00
    变量 <br /> 在Perl里,易用性非常重要的。它一种被称作“格式宽松”的语言,其中变量的定义并没有... <br />标量型变量——数字,字符串和引用  一个标量型变量由$标志来表示,例如$nu

    变量

      在Perl里,易用性非常重要的。它是一种被称作“格式宽松”的语言,其中变量的定义并没有严格要求。实际上,没有什么方法可以定义32位的浮点数变量。
    Perl中有三种变量,它们分别是标量型变量(Scalars),数组型变量(arranys)和散列表(hashes),除了这些颇令人头疼的名字,他们其实都很简单:仅仅包含一些数据的不同排列而已。

    标量型变量——数字,字符串和引用
      一个标量型变量由$标志来表示,例如$nuru,$joe,$pointer。
    例:
    “0.0421”,“Joe’s gloue”,内存地址“0Xa000”

    数组型变量——联系数字标识的标量型变量的列表或者说集合
      一个数组型变量由@标志来表示,例如@v,@list,@variable
    例:
    0

    展开全文
  • 几乎每次在代码中发现flag变量,我总是能嗅到一股馊味。...需要使用标志变量的问题只有一小部分而已,况且即使使用标志变量,取flag这个名字也往往一种草率的下策。  然而由于基础不扎实及某些书籍的误导等缘...

      几乎每次在代码中发现flag变量,我总是能嗅到一股馊味。不管你闻没闻到,反正我闻到了。

      在代码中,flag通常作为标志变量的名字。但问题在于,不是所有的问题或代码都需要使用这种标志变量,更不是使用标志变量一定要用flag这个名字。需要使用标志变量的问题只有一小部分而已,况且即使使用标志变量,取flag这个名字也往往是一种草率的下策。

      然而由于基础不扎实及某些书籍的误导等缘故,不少初学者往往特别善于滥用flag。几乎在任何场合他们都有能力把这个flag使用上且用得出神入化般的别扭,就如同用if语句和goto语句构造循环结构一样,甚至比这更坏。这种情况是由于不熟悉基本的代码结构所致。

      另一种滥用flag的情况则是,由于最初的设计千疮百孔漏洞百出,等到发现时用flag打上丑陋的补丁。

      下面开始阅读代码,请自备口罩。

    样本代码1

    #include <stdio.h>
    #define N 10
    int main()
    {
    int num [N],number,flag=1,c;
    char name[N][8];
    /*……*/
    while(flag==1)
    {printf("\ninput number to look for:");
    scanf("%d",&number);
    search(number,num,name);
    printf("continue ot not(Y/N)?");
    getchar();
    c=getchar();
    if(c=='N'||c=='n')
    flag=0;
    }
    /*……*/
    return 0;
    }

        ——谭浩强 ,《C程序设计(第四版)学习辅导》,清华大学出版社,2010年7月,p92

      这段代码中的while语句是明显的缺陷,因为从这个程序段的功能来说使用do-while才是自然的表达。

    #include <stdio.h>
    #define N 10
    int main( void )
    {
    int num [N],number,flag=1,c;
    char name[N][8];
    /*……*/
    do{
    printf("\ninput number to look for:");
    scanf("%d",&number);
    search(number,num,name);
    printf("continue ot not(Y/N)?");
    getchar();
    c=getchar();
    if(c=='N'||c=='n')
    flag=0;
    }
    while(flag==1);
    /*……*/
    return 0;
    }

     

      其次flag标志变量根本没有必要,代码完全可以写成

    #include <stdio.h>
    #define N 10
    int main( void )
    {
    int num [N],number,flag=1,c;
    char name[N][8];
    /*……*/
    do{
    printf("\ninput number to look for:");
    scanf("%d",&number);
    search(number,num,name);
    printf("continue ot not(Y/N)?");
    getchar();
    c = getchar() ;
    }
    while(!(c=='N'||c=='n'));
    /*……*/
    return 0;
    }

     

      最后,getchar();也用得十分蹩脚,它的用意是读入前面调用scanf("%d",&number)输入一个十进制整数后输入的<CR>(回车换行)。但实际上如果程序使用者输入十进制整数后又顺手按了一个<SP>空格再回车,这个“getchar();”就会因为读入了空格而导致后面的“c = getchar() ;”读取N、n、Y、y这几个文字字符的企图遭到失败。更好的写法应该是

    #include <stdio.h>
    #define N 10
    int main( void )
    {
    int num [N],number,flag=1,c;
    char name[N][8];
    /*……*/
    do{
    printf("\ninput number to look for:");
    scanf("%d",&number);
    search(number,num,name);
    printf("continue ot not(Y/N)?");
    scanf("\n%c",&c );
    }
    while(!(c=='N'||c=='n'));
    /*……*/
    return 0;
    }

     

      与“样本代码1”对比一下,不难发现样本代码1中的flag有多么拙劣。

    样本代码2

    #define N 10
    char str[N];
    int main()
    {
    /*……*/
    int i,flag;
    for(flag=1;flag==1;)
    {scanf("%s",&str);
    if(strlen(str)>N)
    printf("string too long,input again!");
    else
    flag=0;
    }
    /*……*/
    }

     

        ——谭浩强 ,《C程序设计(第四版)学习辅导》,清华大学出版社,2010年7月,p85

      这段代码的flag用得更加可惊可愕,它甚至不如写成功能等价的

    #define N 10
    char str[N];
    int main(void)
    {
    /*……*/
    int i,flag;
    do {
    scanf("%s",&str);
    if(strlen(str)>N)
    printf("string too long,input again!");
    else
    break;
    }
    while(1);
    /*……*/
    }

     

      由此不难看出那个flag有多么多余。然而这个写法依旧啰嗦,更简洁的写法是:

    #define N 10
    char str[N];
    int main(void)
    {
    /*……*/
    do {
    scanf("%s",&str);
    }
    while(strlen(str)>N && printf("string too long,input again!"));
    /*……*/
    }

     

      这写法虽然简洁,然而依然带着样本代码中原来的毛病,这个毛病就是scanf("%s",&str);中的&str。因为str的定义是 char str[10];,而与转换格式%s相对应的参数应该是char *类型的指针,所以这个调用应该写为scanf("%s",str);。

      即便如此,代码依然是错误的。原代码企图在strlen(str)>N的情况下重新输入,这是幼稚的一厢情愿,而且有着双重的错误。从逻辑来说,strlen(str) 等于N时就已经是越界使用数组了。所以strlen(str)>N这个关系表达式不应该使用“>”运算。从实践的角度来说strlen(str)>=N时的越界已然对内存中的数据存储造成了破坏,程序以后的行为是建立在错误的基础上,最后的结果必然是错误的,至少是不可靠的。而结果不可靠,对于程序来说就是一种错误。

      那么,这段代码应该怎样写呢?由于样本代码2要解决的问题是对十个字符排序,这里的要求是输入10个字符。这根本不用写一个循环语句反复折腾,只需简单地

    #define N 10
    char str[N];
    int main(void)
    {
    /*……*/
    int i;
    scanf("%10c" , str ) ;
    /*……*/
    }

     即可。

      当然,也许有人会指责scanf("%10c" , str )没有用上N这个宏,这个指责确实有道理。其实用N这个宏来写scanf("%10c" , str )也并非什么难事,代码可以这样写:

     

    #define N 10
    #define FMT(x) ("%"NUM(x)"c")
    #define NUM(x) #x
    char str[N];
    int main(void)
    {
    /*……*/
    int i;
    scanf( FMT(N) , str ) ;
    /*……*/
    }

     

     

     

    转载于:https://www.cnblogs.com/pmer/archive/2011/11/10/2245012.html

    展开全文
  • 以下在ES5中被称为基本表达式(Primary Expression)this、null、arguments等内置的关键字变量。即一个已声明的标识符字面量。仅包括数字字面量、布尔值字面量、字符串字面量、正则字面量分组表达式,即用来表示立刻...
  • 变量命名规则中起始字符可以 字母,下划线(_),美元符($),只是很多的js库喜欢使用$作为全局变量标志。 jQuery也不例外.加上$,作为jQuery变量标志更容易进行区分。 在使用jQuery 中,如果一个变量被$();包裹。...
  • 首先要来介绍一下什么是标志符。在程序设计的过程中,经常要给变量、函数甚至一些数据类型起名字(还包括以后的类名,对象名等)。我们把这些用户根据一些规定,自己定义的各种名字统称为标志符(Identifier)。...
  • 我们所见到的Java标志,总是一杯热咖啡,这杯热咖啡你很难与计 算机编程联想到一起。这杯热咖啡、Java这个名字的由来,Java 创始人员团队中其中一名成员由于灵感想到的,想起自己在Java岛 (爪哇岛)上曾喝过...
  • 变量命名规则中起始字符可以 字母,下划线(_),美元符($),只是很多的js库喜欢使用$作为全局变量标志。 jQuery也不例外.加上$,作为jQuery变量标志更容易进行区分。 在使用jQuery 中,如果一个变量被$();包裹。...
  • Static变量简介

    2008-04-12 23:59:00
    1:变量的存储方式Static变量是以静态存储的方式存储的。什么是静态存储方式?所谓静态存储方式是指在程序运行期间分配固定的存储空间的方式。但不是以静态存储方式存储的变量就是静态变量,在变量前加上static标志...
  • 如果是跟随正点原子学习STM32的...那么下面分析一下这些“寄存器”到底是什么意思、该如何使用。 1、下面以串口实验为例 串口实验中定义 u16 USART_RX_STA =0 逻辑图分析: 函数本体: void USART1_IRQHandler(void)
  • c语言指针与指针变量

    2019-01-10 23:26:40
    1.指针变量一个变量,为了与普通变量区分才在前面加上*,所以在定义指针变量时*只是标志。 2.顾名思义,指针变量对应的普通参数的指针(也就是地址),而普通变量的地址表示方式在参数前加上&amp;(取...
  • java基础--变量

    2018-07-17 18:26:00
     变量是用来命名一个数据的标志符。 1.2.标志符的命名规则: 不能为关键字(如if,while等等) 由数字,字母,下划线,$组成,但不能以数字作为开头 java是大小写敏感的 int a; int A; a与A是不同的...
  • 指针和指针变量

    2015-02-27 11:40:32
    1.指针是什么 了解指针之前我们需要先了解下什么是内存,如果我们在程序中定义了一个变量,系统就会根据定义的变量类型给这个程序分配相应的内存空间,举个例子,整型变量会分配4个字节, 字符型会分配一个字节,...
  • 什么我的Myeclipse在点击某个变量或者对象时,不能将相同的变量或者对象标志出来,也就是成灰色显示 点右上角的按钮 Toggle Mark Occurrences , 如图所示: Shift Alt O (其实 Alt Shift O 也可以,...
  • 静态变量 静态函数

    2008-11-13 10:20:00
    一个类的静态成员,是所有对象共享的,分配空间也是在进程执行时,一开始就...而一个类的静态成员函数里,定义的变量是怎么样的呢?是不是也是所有对象共享呢?类的静态函数和类的成员变量一样,也是 在进程执行时,一开始就分
  • 什么是变量? 在计算机中用来存储信息,通过声明语句来指明存储位置和所需空间。 变量的声明方法及赋值 分号:语句结束标志 赋值号:将=右边的值赋给左边的变量 变量有哪些数据类型? 变量的命名语法规范(合法) ...
  • 文章目录什么标志标志符命名规则标志符命名规范常量 什么标志符 在Java中凡程序员可以自己定义的名称都叫标志符,包括: 类名 方法名 接口名 变量 常量 标志符命名规则 java中的标志符都以字母、数字、...
  • shell中的变量及函数

    2018-06-22 05:39:38
     变量即在程序运行过程中它的值是允许改变的量,变量是用一串固定的字符来标志不固定的值的一种方法,变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储scripts运行时可更改的...
  • 一个类的静态成员,是所有对象共享的,分配空间也是在进程执行时,一开始就...而一个类的静态成员函数里,定义的变量是怎么样的呢?是不是也是所有对象共享呢?类的静态函数和类的成员变量一样,也是 在进程执行时,一开始就分
  • 指针是什么

    2019-02-17 11:17:42
    要搞清指针是什么,首先我们说一下数据是怎样在内存中存储的,又是怎么读取的: 在程序中我们定义一个变量,那么在对程序进行编译时,系统就会给这个变量分配内存单元,即编译系统根据程序中定义的变量类型分配一定...
  • java的变量和常量以及常量池

    千次阅读 2017-10-24 17:39:10
    首先变量名和常量名都用户自行定义的标志符,遵循先定义后使用的原则,常量和变量的区别常量之后会不会改变 变量 占据着内存的某一存储区域,该区域有自己的名称和数据类型,该区域的数据可以在同一...
  • java中静态变量是类的变量,不需要把类实例化对象也能直接使用。 在java虚拟机管理的内存中,静态变量仅仅是一个标志位,只要标志位上面是1,那么虚拟机在读取的时候便认为这个是静态变量。 package ...
  • dockerfile有env选项,可以让我们在生成的镜像里添加一些环境变量,这些环境变量什么作用?可以用来作为标志,代表部署的环境的一些参数。比如说我们需要一个docker部署一个mysql。那么我们可以添加一个标识来表示...
  • 复制代码​ 熟悉Java内存模型的朋友都知道,静态变量是存储在方法区之中的,而静态变量又属于整个类的实例,那么静态变量整个的生命周期是什么样子,什么时候会被回收呢?在此之前其实没有太多考虑这个问...
  • 上面的邻接矩阵代码用的也结构体变量,为什么又可以执行,因为邻接表图的结构体中有指针吗,但是以下代码 ``` #include struct MyStruct{ int a; int *b; MyStruct *c; }; int main(){ ...
  • MFC 篇 1、afx_msg  afx_msg为消息标志,它向系统声明:有消息映射...而在map宏定义中,就有具体消息和此函数的映射定义(可以自定义,也可以系统自动完成的),对人没什么用处,可以忽略 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 616
精华内容 246
关键字:

标志变量是什么