C++ 用new定义数组和直接定义数组

为什么下面的正确
char s2[50]="who are you!";
s2[18]='a';

而下面的出错
char *s1=new char[50];
s1="who are you!";
s1[18]='a';

以m*n举例:第一种方法:int **a = new int*[m];for(int i=0; i < m; i++)a[i] = new int[n];

第二种方法:int* a = new int[m*n];a[i*n+j]是第i行第j列元素。

整型为例:const int M = 10, N = 5;//10行5列。int ** a;a = new int *[M];for(int i = 0; i < M; i ++)

C++语言的程序因为要体现高性能,所以都是编译型的。但其开发环境,为了方便测试,将调试环境做成解释型的。即开发过程中,以解释型的逐条语句执行方式来进行调试,以编译型的脱离开发环境而启动运行的方式来生成程序最终的执行代码。


扩展资料:

在C++中,类是支持数据封装的工具,对象则是数据封装的实现。C++通过建立用户定义类支持数据封装和数据隐藏。

在面向对象的程序设计中,将数据和对该数据进行合法操作的函数封装在一起作为一个类的定义。对象被说明为具有一个给定类的变量。

每个给定类的对象包含这个类所规定的若干私有成员、公有成员及保护成员。完好定义的类一旦建立,就可看成完全封装的实体,可以作为一个整体单元使用。类的实际内部工作隐藏起来,使用完好定义的类的用户不需要知道类是如何工作的,只要知道如何使用它即可。

参考资料来源:百度百科-C++

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-15
char *s1=new char[50]; //定义s1指针变量,并分配内存50个字符空间
s1="who are you!"; //这里重新将s1指向了"who are you!" 这个常量字符串所在的内存地址,该地址属于不可修改区域! 而且原来分配的50个字符的空间也找不到了,形成内存碎片了
s1[18]='a'; //想修改不可修改的区域中的内容,所以会出错!本回答被提问者采纳
第2个回答  2015-11-03
因为一个literal字符串只能赋给const char*
第3个回答  2014-09-13
因为一个literal字符串只能赋给const char*追问

能说明白点吗?而且是执行到s1[18]='a'这里出错

第4个回答  推荐于2017-10-10
以m*n举例:
第一种方法:
int **a = new int*[m];
for(int i=0; i < m; i++)
a[i] = new int[n];
第二种方法
int* a = new int[m*n];
a[i*n+j]是第i行第j列元素
以整型为例
const int M = 10, N = 5;//10行5列。
int ** a;
a = new int *[M];
for(int i = 0; i < M; i ++)
a[i] = new int[N];
所得到的a就是10行5列的数组。
使用后需要释放,代码为
for(int i = 0; i < M; i ++)
delete [] a[i];
delete []a;
相似回答