精华内容
下载资源
问答
  • 字符串的定义与赋值及初始化

    万次阅读 多人点赞 2013-06-18 14:08:57
    字符串的定义与赋值及初始化 C语言的运算符根本无法操作字符串。在C语言中把字符串当作数组来处理,因此,对字符串的限制方式和对数组的一样,特别是,它们都能用C语言的运算符进行复制和比较操作。 怎么给这个...

                                                                                  字符串的定义与赋值及初始化

    C语言的运算符根本无法操作字符串。在C语言中把字符串当作数组来处理,因此,对字符串的限制方式和对数组的一样,特别是,它们都不能用C语言的运算符进行复制和比较操作。

    怎么给这个字符数组赋值呢?,先看字符串的定义。

    1.字符串的定义

    char[]={“cc”};

    如果使用这种定义方法,则数组长度必须大于字符串的长度,至少大1。当然也可以不指定数组长度

    例如:

    char[3]={“str”};
    
    char[3]=”ccc”;

    以上这两种,错误定义,系统会报错,字符溢出。

    例;

    char[3]={‘c’,’c’,’c’};

    这种定义方法,系统不会报错,但最后的输出会出现乱码。

    正确定义:

    char[]={‘c’,’c’,’c’};或char[4]={‘c’,’c’,’c’};

    字符数组的赋值:

    1、定义的时候直接用字符串赋值

    char a[10]="hello";
    注意:不能先定义再给它赋值,如char a[10]; a[10]="hello";这样是错误的!
    2、对数组中字符逐个赋值
    char a[10]={'h','e','l','l','o'};
    3、利用strcpy
    char a[10]; strcpy(a, "hello");

    直接尝试对字符串进行复制或比较操作会失败。例如,假定str1str2有如下声明:

    char str1[10], str2[10];

    利用=运算符来把字符串复制到字符数组中是不可能的:

    str1 = "abc"; /*** WRONG ***/

    str2 = str1; /*** WRONG ***/

    C语言把这些语句解释为一个指针与另一个指针之间的(非法的)赋值运算。但是,使用=初始化字符数组是合法的:

    char str1[10] = "abc";

    这是因为在声明中,=不是赋值运算符。

    试图使用关系运算符或判等运算符来比较字符串是合法的,但不会产生预期的结果:

    if (str1==str2) ... /*** WRONG ***/

    这条语句把str1str2作为指针来进行比较,而不是比较两个数组的内容。因为str1str2有不同的地址,所以表达式str1 == str2的值一定为0

    即:字符串数组不能用"="直接赋值, 即s="Good News!"是不合法的。可以用字符串指针为其赋值。 

    例如:

    char *f[2];
    f[0]="thank you"; /*给字符型数组指针变量赋值*/
    f[1]="Good Morning";
    展开全文
  • C++字符数组 定义初始化 赋值和引用
                   
     char c[6];//发现这里无论定义多长用strcat会扩充数组大小 c[0]='C'; c[1]='h';c[2]='i';c[3]='n';c[4]='a';c[5]='\0'//不加零(结束标志的话strcat是有问题) char d[14]={'I','s','0',0X00,'a',0X00,'m','n','h','a','p','p','y','\0'};//定义时[]中的数字必须大于填充的值,这里也演示了出现0x00数组会被认为结束的现象,但在编译的时候它又可以视别出长度不够,这里的0x00与\0等价 strcat(c,d); printf("%s\n",c);

    C++字符数组(定义和初始化、赋值和引用)

    用来存放字符数据的数组是字符数组,字符数组中的一个元素存放一个字符。字符数组具有数组的共同属性。由于字符串应用广泛,C和C++专门为它提供了许多方便的用法和函数。

    一、字符数组的定义和初始化

    定义字符数组的方法与前面介绍的类似。例如
    char c[10];
    c[0]=′I′;c[1]=′ ′;c[2]=′a′;c[3]=′m′;c[4]=′ ′;c[5]=′h′;c[6]=′a′;c[7]=′p′;c[8]=′p′;
    c[9]=′y′;
    上面定义了c为字符数组,包含10个元素。在赋值以后数组的状态如图5.7所示。

    图5.7

    对字符数组进行初始化,最容易理解的方式是逐个字符赋给数组中各元素。如
       char c[10]={′I′,′ ′,′a′,′m′,′ ′,′h′,′a′,′p′,′p′,′y′};
    把10个字符分别赋给c[0]~c[9]这10个元素。

    如果花括号中提供的初值个数大于数组长度,则按语法错误处理。如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符。如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。如
       char c[]={′I′,′ ′,′a′,′m′,′ ′,′h′,′a′,′p′,′p′,′y′};
    也可以定义和初始化一个二维字符数组,如
       char diamond[5][5]={{′ ′,′ ′,′*′},{′ ′, ′*′,′ ′,′*′},{′*′,′ ′,′ ′,′ ′,′*′},{′ ′,′*′,′ ′,′*′},{′ ′,′ ′,′*′}};

    二、字符数组的赋值与引用

    只能对字符数组的元素赋值,而不能用赋值语句对整个数组赋值。如
    char c[5];
    c={′C′,′h′,′i′,′n′,′a′}; //错误,不能对整个数组一次赋值
    c[0]=′C′; c[1]=′h′;c[2]=′i′;c[3]=′n′;c[4]=′a′;  //对数组元素赋值,正确

    如果已定义了a和b是具有相同类型和长度的数组,且b数组已被初始化,请分析:
    a=b;  //错误,不能对整个数组整体赋值
    a[0]=b[0];  //正确,引用数组元素

    例5.9 设计和输出一个钻石图形。
    #include <iostream>
    using namespace std;
    void main( )
    {
       char diamond[][5]={{′ ′,′ ′,′*′},{′ ′,′*′,′ ′,′*′},{′*′,′ ′,′ ′,′ ′,′*′},{′ ′,′*′,′ ′,′*′},{′ ′,′ ′,′*′}};
       int i,j;
       for (i=0;i<5;i++)
       {
          for (j=0;j<5;j++)
             cout<<diamond[i][j]; //逐个引用数组元素,每次输出一个字符
          cout<<endl;
       }
    }
    运行结果为
      *
      * *
    *  *
      * *
      *
               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • 深入理解数组的定义初始化

    千次阅读 2018-08-09 08:42:21
    下面就数组的定义初始化的一些特性做一些探讨。 定义数组  通常,定义一个数组,只需要写出数组类型、数组名、数组大小即可。这是每一个写程序的人都知道的。这里需要说明一点,数组的大小,一定非得是整型...

        数组是经常用到的一种内置复合类型,虽然如此,但是并不是每一个人都能熟悉数组的一些独特特性。下面就数组的定义和初始化的一些特性做一些探讨。


    定义数组

        通常,定义一个数组,只需要写出数组类型、数组名、数组大小即可。这是每一个写程序的人都知道的。这里需要说明一点,数组的大小,不一定非得是整型字面值。我们可以在方括号中使用const变量常量表达式枚举
     

    
     
    1. const unsigned buf_size = 512;

    2. enum SizeType{zero, one, two, three, four};

    3. enum SizeType size = three;

    4. int data[buf_size]; //const变量

    5. int data2[3+5]; //常量表达式

    6. int data3[buf_size +1]; //含有const变量的常量表达式

    7. int data4[size]; //含有枚举

     

    数组的初始化

        数组的初始化常常是一个被忽视的问题,而在实际编程中,数组初始化带来的bug是常有的且难以发现。因此,深入掌握数组初始化的细节,有助于编程能力和debug能的提升。

        数组如果没有显示地初始化,即在定义数组的时候,就给它们赋值,那么,定义出来的数组满足以下三点规则:     

    1. 定义在函数体外的数组,并且数组类型是内置类型,那么数组自动初始化为0.
    2. 定义在函数体内的数组,并且数组类型是内置类型,那么数组没有被初始化,这也是导致bug的一个来源。
    3. 不管数组在哪里定义,只要数组类型是一个自定义类,那么数组就会被默认构造函数初始化。

     

    测试

     

    下面对于上面提到的三条规则逐一测试验证。

    规则1:

     

    按照前面提到的,我把数组定义在主函数外,并不给它赋值,然后在主函数中直接引用这个数组。我们写下如下测试代码

     

    
     

    #include <stdio.h>

    int data[10];

    int main()

    {

         for(int i=0; i<10; ++i)

              printf("%d ",data[i]);

        return 0;

    }

     

    结果:

     

    从运行结果来看,当把数组定义在主函数外,数组自动初始化为0。如果要定义的数组,初始化就是想让它为0,那么在函数体外定义的数组,可以不初始化。

     

    规则2:

    我们把数组的定义移到主函数内,并不显示地初始化。代码如下

     

    
     

    #include <stdio.h>

    int main()

    {

         int data[10];

         for(int i=0; i<10; ++i)

             printf("%d ",data[i]);

         return 0;

    }

    结果:

    从程序的运行结果来看,如果把数组定义到函数体内部,并且不进行显示的初始化,那么数组就没有被初始化。这个时候,数组元素的值是一些毫无意义的垃圾值。这种未初始化的数组,经常导致致命的bug。

    规则3:

    上面两个例子都是使用的系统内置的类型,接下来,我们来自定义一个类,并测试数组类型为自定义类型时的情形。

    首先我们定义一个类MyClass,并分别把它放到函数体外和函数体内部,观察程序的

    
     

    #include <stdio.h>

    class MyClass

    {

       int x;

       public:

       MyClass()

      {

          printf("\n默认构造函数被调用");

          this->x = 3;

       }

    };

    MyClass outside[1];

    int main()

    {

        MyClass inside[1];

        return 0;

    }


    结果:

    从运行结果来看,无论把数组定义在哪里,并且没有显示地初始化,那么数组将会由默认构造函数来初始化。

    文章来源:  https://blog.csdn.net/tiredoy/article/details/24497569

    展开全文
  • 数组如何定义初始化

    千次阅读 2019-01-05 22:00:35
    数组可以用于存储一相同类型的数据,数组的元素可以是简单类型也可以是引用类型 1.数组定义 数组可分为一维数组、二维数组和多维数组。一维数组的定义有以下两种方式: type[] arr_name; type arr_name[]; 二维...
  • 数组的定义初始化

    千次阅读 2019-08-17 18:25:17
    1.定义的时候初始化 int a[4] = {1,2,3,4}; /*初始化所有元素*/ int b[4] ={1,2,3}; /*初始化前面3个元素*/ int c[] ={1,2,3,4,5,6}; /*定义的长度为6,并且初始化*/ 2.初始化函数memset int a[4]; memset(a...
  • C++字符数组的定义初始化、引用

    万次阅读 2016-09-03 23:10:04
    用来存放字符数据的数组是字符数组,字符...一、字符数组的定义初始化 定义字符数组的方法与前面介绍的类似。例如 char c[10]; c[0]=′I′;c[1]=′ ′;c[2]=′a′;c[3]=′m′;c[4]=′ ′;c[5]=′h′;c[6]=′a′;c
  • 1、字符数组的定义初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。 char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'}; 即把10个字符分别赋给str[0]到str[9]10个元素 如果花...
  • 用来存放字符数据的数组是字符数组,字符...一、字符数组的定义初始化 定义字符数组的方法与前面介绍的类似。例如 char c[10]; c[0]=′I′;c[1]=′ ′;c[2]=′a′;c[3]=′m′;c[4]=′ ′;c[5]=′h′;c[6]=′a′;c
  • 数据类型 数组名[数组元素数量]; 注意:数组元素数量一定是常数、...数组:定义初始化、使用   一维数组 定义:存储类型 数据类型 数组名[正整数] 初始化: 全部初始化:int a[5]={12,23,45,35,9},int ...
  • 正确初始化二维数组

    千次阅读 2013-08-26 18:42:37
    以下能对二维数组正确初始化的语句是_C__。 A static int a[2][3]={0}; B static int a[ ][3]={{1,2},{0}}; C static int a[2][3]={{1,2},{3,4},{5,6}} D static int a[ ][3]={1,2,3,4,5,6}; 为...
  • 关于数组初始化

    千次阅读 2017-03-30 17:17:20
    1.定义一个数组,如果没有初始化,那么数组元素的值是确定的。2.数组可以用花括弧括起来的一系列数值来初始化,数值之间用逗号分隔,数值和逗号之间可以有空格符3.初始化时,如果数值个数少于数组元素个数,那么...
  • a:动态初始化 只指定长度,由系统给出初始化值 格式: * 数据类型[] 数组名 = new 数据类型[数组长度]; * int[] arr = new int[5]; b:静态初始化的格式: * 格式:数据类型[] 数组名 = new 数据类型[]{...
  • C语言数组初始化

    千次阅读 2019-01-13 23:23:20
    C语言数组初始化 wchar_t wname[128]={0}; char cname[256]={0}; 我感兴趣的是: ...当初始化值的个数少于数组元素个数时,前面的按序初始化相应值,后面的初始化为0(全局或静态数组)或为确定值(局部...
  • C语言中数组初始化操作

    千次阅读 2018-01-17 10:37:02
    C语言中数组初始化操作 ... - 能直接使用int array[maxn] = {-1}来对数组进行初始化,这样得到的数组中的值并非是-1 4. 程序代码如下: #include #include #define maxn 10 int array1[maxn]={-1}; vo
  • C语言 数组指针初始化

    千次阅读 2020-06-20 10:41:03
    当然不行,不管从初始化器,还是从原理上来讲都不正确,首先a[3][4]表示的是数组中第4行第5个元素,请问,可以对数组中具体的一个元素赋这么长一串值吗?所以能这样赋值。第一种写法是属于初始化初始化会自动...
  • 陷阱:全零初始化 使用小随机数初始化 用1 / sqrt(n)标准化方差 稀疏初始化 初始化偏差 批量标准化 正则化 L2正则化 L1正则化 最大范数约束 Dropout 损失函数 分类问题 属性分类 回归 结构化预测 小结 .....
  • 动态初始化:数组定义与为数分配空间和赋值的操作分开进行; 静态初始化:在定义数字的同时就为数元素分配空间并赋值; 默认初始化:数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个...
  • 数组的初始化

    千次阅读 2017-07-30 11:20:50
     一直以来,初始化变量和数组常采用定义时赋值的方法,今天在定义一个结构体的时候发现了一些问题,查了下相关资料发现以往的使用确实有些误区,一直没有注意到,于是搜集了下零散的资料在此记录一下。 一、以往...
  • AHP层次分析法—特征权重初始化

    千次阅读 2019-05-21 12:26:30
    这些结果是由一些特征加权计算得到,因此如何初始化特征的权重就显得尤为重要。如果一味的按照经验去进行初始化权重,然后不停的A/B测试,权重调整,是一件研发成本特别高的事情。故我选用AHP来对特征权重进行初始化...
  • C语言的数组初始化

    千次阅读 2018-07-06 15:25:45
    这是很基础的东西,但基础的重要性不言而喻,我敢肯定这个知识点我肯定曾经了解过,但现在,我敢确定,由此可见纪录的重要性,这世界没有什么捷径,找对方向,然后不停重复.所以从今天开始,我会比
  • 动态初始化:数组定义与为数分配空间和赋值的操作分开进行; 静态初始化:在定义数字的同时就为数元素分配空间并赋值; 默认初始化:数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素...
  • 指针的初始化总结

    2013-10-09 14:08:48
    1. 字符指针的初始化 在c语言中 "string"保存的就是首个字符所在的地址 所以可以把 字符串常量"string" 赋值给指针 char *p; p="string" 但能把字符串常量直接赋给数组,需要用到 strcpy。 但可以对数组...
  • 数组,结构体初始化 {0}

    千次阅读 2014-10-29 10:38:14
    一直以为 int a[256]={0};是把a的所有元素初始化为0,int a[256]={1};是把a所有的元素初始化为1. 调试的时查看内存发现不是那么一回事,翻了一下...5.2.1 数组初始化 数组可以用一个列值来初始化,例如  int v1[]
  • 一维数组初始化

    2019-04-25 11:03:08
    为了使程序运行简便,在程序定义的时候就把有相同性的值进行赋值也就是对数组的初始化例如: int a[10]={1,2,3,4,5,6,7,8,9}将数组中的各种元素初始值按顺序放到花括号里,数据用逗号隔开,中括号里的值就是数组初始...
  • 数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现处理也不尽相同。Java 语言中提供的数组是用来存储固定大小的同类型元素。我们可以声明一个数组变量,如 numbers[100] 来代替直接...
  • C语言-数组-2初始化

    2013-09-04 20:58:17
    //数组的初始化要在定义的时候赋值 //数据类型 数组名[长度] = {元素1,元素2,元素3,...}; int a[5] = {1,2,3,4,5}; printf("%d ",a[5]); //警告提示 注C语言中编译器是不会对数组下标越界进行检查,...
  •  在上一篇文章有提到数组和指针的初始化和赋值问题,对于数组,可以初始化,但能对整个数组赋值,而指针,可以初始化也可以赋值。    在结构体中,数组和指针最大的的区别为:数组将信息存在结构体所占有...
  • Qt中数组的初始化

    万次阅读 2012-06-05 09:18:50
    如果Qt中某类中有数成员,对数组初始化必须放在构造函数而非类的声明中,同时类的声明中必须指定数组的大小。 如: class SerialPort : public QWidget {  Q_OBJECT  ……  const int speed_arr[]= {B...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,053
精华内容 11,221
关键字:

对数组定义及初始化不正确