c++类里定义的字符型数组const char a[5]怎么赋值?

class X
{
......
const char a[5];
......
}
如何给它赋值
谢谢

有多种方式可以赋值。
(1)声明和初始化同时进行,例如:
const char a[5]={'X','Y','Z','1','2'};
(2)把它看成字符串,用 strcpy 赋值,例如:
strcpy(a,"abcde");
(3)用 memcpy 把另一个数组里的值传给它
memcpy(a,b,5);
(关键注意 a[i] 不能做左值,用赋值语句赋值,因为 它是 const.)
在 c++ class 里,也 用 c 语言 的 同样 方法。
只是 头文件 要包含:
#include<iostream>
#include <string>
using namespace std;
#include <stdio.h>
------------
程序例子:
#include<stdio.h>
int main(){
const char a[5]={'X','Y','Z','1','2'};
int i;
for (i=0;i<5;i++) printf("%c ",a[i]);
printf("\n");
strcpy(a,"abcde");
printf("%s\n",a);
strcpy(a,"12345");
printf("%s\n",a);
for (i=0;i<5;i++) printf("%c ",a[i]);
{ char b[6]="ABXYZ";
memcpy(a,b,5);
printf("\n%s\n",a);
};
return 0;
}
输出:
X Y Z 1 2
abcde
12345
1 2 3 4 5
ABXYZ
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-08-06
class X
{
    ...
    static const char a[5]; // 定义为静态的~
    ...
};
const char X::a[5] = {'h', 'e', 'l', 'l', 'o'}; // 在类外初始化,不需要加static

追问

必须要加static么?

追答

如果不是常量数组的话,可以不是静态的,不过初始化的时候要在构造函数里面。

追问

是怎么弄的,能详细些么谢谢?我是新手

追答

刚才你给的情况,数组是常量,也就是声明的时候需要赋值,之后值不会被改变。如果数组不是常量数组的话,比如下面的情况,可以采用下面的方式赋值:

class X
{
    ...
    char a[5];
    X()    // 默认构造函数,初始化成员变量
    {
        for(int i = 0; i < 5; ++i)
            a[i] = ' ';    // 赋值为空字符(单引号里有个空格)
    };
}

追问

明白了如果是字符型常量如“hello world”就必须用static const来初始化,如果不是常量是字符型变量如char [5]就不用,是吧

追答

是的,对头!

本回答被提问者采纳
第2个回答  2018-03-14
class X
{
    //  ......
    const char a[5] = { 1, 2, 3, 4, 5 };
    //  ......
};

第3个回答  2014-08-06
没有这么用的吧,定义个静态变量还可以,但const不能这样用吧?!

c++类里定义的字符型数组const char a[5]怎么赋值?
const char a[5]={'X','Y','Z','1','2'};(2)把它看成字符串,用 strcpy 赋值,例如:strcpy(a,"abcde");(3)用 memcpy 把另一个数组里的值传给它 memcpy(a,b,5);(关键注意 a[i] 不能做左值,用赋值语句赋值,因为 它是 const.)在 c++ class 里,也 用 c 语言 的...

C++ 类中 字符串怎么赋值
类中只用声明char s;即可 构造函数中加s=NULL;然后 int set_s(const char new_s){ if (s)delete s;s = new char[strlen(new_s)+1];strcpy(s,new_s);return 0;} 析构函数中加 if (s)delete s;

C++里面,含有数组的类对象是怎么赋值的?
C++类的对象数组赋值问题 如下:void main(){ CStudent Cs[4]={ CStudent(1,"张三",80), CStudent(2,"李四",75), CStudent(3,"王五",95), CStudent(4,"小六",62) }; \/\/这样就可以赋初值.也可以使用成员函数一个个设置.如下:\/* Cs[0].SetID(1); Cs[0].SetName("张...

constchar是什么意思?比如要把一个变量定义为constchar有什么..._百...
const char指的是字符常量,它具有不可变性。一旦被初始化或赋值,其值就不能被改变。这种类型常用于定义字符串常量或字符数组中的元素。例如,在定义字符串常量时,每个字符都被视为const char类型。这是因为字符串在程序运行过程中是不可变的,即其内容一旦确定就不能更改。2. const char的应用场景 ...

C++中如何将汉字字符串赋值给一个变量?
使用strcpy函数,修改char输入的元素值,注意不要越界strcpy(a,"你好");

C++ const char* 和 char*区别
char *都一样, 说明定义指向字符类型数据的指针, const修饰表明这个指向的数据类型(char型)的数据是只读的,或者说是常量不允许修改,仅此区别,如果在程序中用p去修改了数据则会在编译时报错

关于C++中string类型变量的赋值
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数...

C++里的基础类型字面值都底是const的还是非const得?请看看问题提...
= "hello"; 这样的初始化或者 char* q; q = "hello"; 这样的赋值就是非法的了(因为右边的类型 char const* 不能默认转换为左边的类型 char* )。同样,为了使上述代码能顺利通过编译过程,C++ 采取了另外一种策略:它规定了字符串字面量的类型是 const 数组,同时又特别规定了字符串字面量也...

const char *赋值 char*
第一种情况:char *p="123";是将p指针指向了const字符串“123”;也就是说p是指向常量的指针,所以,*(++p)=‘k’出错,因为你在试图对常量重新赋值。第二种情况:char c[]="hello";这个是比较容易混淆的,因为其形式很像第一种,但其实有本质的区别。这里我们用字符串“hello”来初始化数组...

请问C++的字符串string类为什么数组中不能为变量?
因为数组在C++中是静态存在的,它占用一定的空间(也就是固定长度),在数组当前所在函数运行中是不能改变其长度的(函数结束就消失),一旦改变了长度,数组所在内存区就会出现空缺,导致出错!你在int n=5之前不添加const声明为常变量,系统将认为你“企图”在运行中修改数组长度,所以不予通过。

相似回答