请教!关于C++里的字符串、指针、new的用法 20
我是菜鸟啊T_T这里一直弄不明白……在例题里见到有这样的语句:char*name;......name=newchar[20];......char*s=newchar[...
我是菜鸟啊T_T这里一直弄不明白……
在例题里见到有这样的语句:
char *name;
......
name=new char[20];
......
char *s=new char[50];
请问这是怎么回事啊??new语句等号前面到底应该是指针变量还是指针所指向的地址还是别的什么啊?
还有字符指针、字符串指针、
比如
char a='A';
char *p1='a';
char *p2=&a;
char *p3=a;
char *p4="hellowrold";
strcpy(p4,p3);
请问下这里p1、p2、p3、p4、*p1、*p2*、*p3、*p4都是什么啊?各自的类型和值(或意义)?
strcpy(p3,p4)里的p3和p4不是指针吗?又不是字符串怎么能调用这个函数?还有main()函数里cout<<p4<<endl;这是什么意思啊?输出指针变量?可是运行之后为什么是输出p4所指的字符串呢?
char *name; name=new char[20]; 和 char *s=new char[50];
这两种写法为什么都可以啊? 展开
在例题里见到有这样的语句:
char *name;
......
name=new char[20];
......
char *s=new char[50];
请问这是怎么回事啊??new语句等号前面到底应该是指针变量还是指针所指向的地址还是别的什么啊?
还有字符指针、字符串指针、
比如
char a='A';
char *p1='a';
char *p2=&a;
char *p3=a;
char *p4="hellowrold";
strcpy(p4,p3);
请问下这里p1、p2、p3、p4、*p1、*p2*、*p3、*p4都是什么啊?各自的类型和值(或意义)?
strcpy(p3,p4)里的p3和p4不是指针吗?又不是字符串怎么能调用这个函数?还有main()函数里cout<<p4<<endl;这是什么意思啊?输出指针变量?可是运行之后为什么是输出p4所指的字符串呢?
char *name; name=new char[20]; 和 char *s=new char[50];
这两种写法为什么都可以啊? 展开
5个回答
展开全部
C/C++中的字符串都是通过字符指针来实现的,比如声明:
char str1[255];
char *str2;
这样str1这个数组名就是一个字符指针型的,通过字符数组可以输入字符串,cin>>str1;但是不能超过254个字符,因为要有串结束符;
而str2是指针,但是没有分配空间,输入前要用new分配足够的空间,用完后还要释放,用的时候还是cin>>str2;
C++还可以不用字符指针,用string类,如:
#include <string>
using namespace std;
.
.
string str;
cin>>str;
这样会比较方便
我可以帮助你,你先设置我最佳答案后,我百度Hii教你。
char str1[255];
char *str2;
这样str1这个数组名就是一个字符指针型的,通过字符数组可以输入字符串,cin>>str1;但是不能超过254个字符,因为要有串结束符;
而str2是指针,但是没有分配空间,输入前要用new分配足够的空间,用完后还要释放,用的时候还是cin>>str2;
C++还可以不用字符指针,用string类,如:
#include <string>
using namespace std;
.
.
string str;
cin>>str;
这样会比较方便
我可以帮助你,你先设置我最佳答案后,我百度Hii教你。
展开全部
p1是一个char指针,p1所指内存存放着‘a’的地址
p2也是char指针,其所指内存中存放着变量a的地址
p3显然是不对的,不能把char变量赋值给char指针;
p4则存放着字符串的首个字符的地址;
p2也是char指针,其所指内存中存放着变量a的地址
p3显然是不对的,不能把char变量赋值给char指针;
p4则存放着字符串的首个字符的地址;
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数组名称就是地址.
char* name=new char[20];中name是一个数组,也是一个地址,后面有19个字节(就想象一下有20个空框)。name是这20个字节的第一个字节的地址,name+1, name+2……分别是第2、第3个字节的地址。
cout<<name<<endl;的效果是将name的每个字节输出,直到遇到'\0'.
strcpy是复制,直到遇到'\0'。('\0'表示结束,NULL)
char* s =new char[N];表示让系统在s后面留下N个字节的空白(N=20,50,100等)。
char* name=new char[20];中name是一个数组,也是一个地址,后面有19个字节(就想象一下有20个空框)。name是这20个字节的第一个字节的地址,name+1, name+2……分别是第2、第3个字节的地址。
cout<<name<<endl;的效果是将name的每个字节输出,直到遇到'\0'.
strcpy是复制,直到遇到'\0'。('\0'表示结束,NULL)
char* s =new char[N];表示让系统在s后面留下N个字节的空白(N=20,50,100等)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我答下你的补充问题
这两种写法类似于数组的声明和初始化如:
int array[5] = { 1,2,3,4,5}和
int array[5];
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
array[4] = 5;
不同之处在于 char *name; 是定义的一个指针指向由 new 操作符分配的动态内存空间的地址,故不需要如指针般一个个的对其赋值,可以使用 char *name; name=new char[20]; 的语句结构。
不知道还满意吗?不懂得可以再问我~~。
这两种写法类似于数组的声明和初始化如:
int array[5] = { 1,2,3,4,5}和
int array[5];
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
array[4] = 5;
不同之处在于 char *name; 是定义的一个指针指向由 new 操作符分配的动态内存空间的地址,故不需要如指针般一个个的对其赋值,可以使用 char *name; name=new char[20]; 的语句结构。
不知道还满意吗?不懂得可以再问我~~。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询