关于c++ 字符串指针与字符数组的问题


这是我自己写的字符数组
class Student
{
private:
char Name[20];
public:
Student(char name[20])
{
strcpy(Name,name);
}
void main()
……

答案是
Student(char *name)

{
Name=new char[strlen(name)+1];
strcpy(Name,name);

}
~Student()
{
delete Name;
}

我的问题有两个
1.我用的数组 他用的是指针 但是他还写了一句Name=new char[strlen(name)+1];
delete Name;

那么用数组能写两句话吗 换句话说是否还有意义?
2.如果数组都不用写的话 那使用指针不是显得麻烦吗 为什么还要用指针 有什么优势?

答案是错的,是delete [] Name不是delete Name

答案上的写法可以存储任意大小的字符串,但是字符串是保存在堆里,所以速度慢。
你的只能存储19个字符,但是速度快。

指针式用来存储地址的,任何数据保存在内存中,只能通过地址来读取,C++提供指针类型是为了让程序员有能力操作内存。

1.我用的数组 他用的是指针 但是他还写了一句Name=new char[strlen(name)+1];
delete Name;

你用的是堆栈上的内存或者静态存储区的内存空间,所以你的代码执行速度比较快,但是你的代码有一个缺点:最多只能存储19个字符。

2.如果数组都不用写的话 那使用指针不是显得麻烦吗 为什么还要用指针 有什么优势?

用指针可以直接操作内存,这就是用指针的原因。

C++里面是不推荐使用C语言的数组的。 要用字符串请使用string, 要用动态数组请使用vector,要用静态数组请使用array
1、Name=new char[strlen(name)+1]; 这句是初始化Name,使它的长度为name+1,(因为字符数组后边还有\0 占一位) 后面的~Student 是析构函数,释放资源。
2、 Student(char *name),这里参数传过来的只是首地址,一共有多少个字符没有关系,但是如果用的是数组,像你那样,就把长度限制住了,不灵活···。


Copyright © 2009-2011 All Rights Reserved.