c++中的char* 和char[]的使用
来源:互联网 发布:淘宝模特摄影 知乎 编辑:程序博客网 时间:2024/05/16 11:16
首先当使用char*或者char[]来表示字符串时,加上string.h头文件来调用库函数。
1、char
char只表示一个字符,若重复赋值,则或者会覆盖前者:
char ch='qwqewqe';
cout<<ch<<endl;
输出:e
因为char只有一个字符,后者会覆盖前者。
2、char * src表示字符串
char *src="qwqewqe";
cout<<src<<endl;
这里的src为指针,指向的就是该字符串的首地址开始表示的内容 。
可以使用src[i]获取第i的字符;也可以使用src+i代表第i个字符
可以使用src获取整个串;
可以使用&src获取存放该字符串的首地址:
char *src="qwertyu";
cout<<src[0]<<" "<<src[1]<<" "<<src[2]<<endl;
cout<<src<<endl;
cout<<&src<<endl;
这里如果想使用printf输出,只能使用src,不能加&
因为*src代表src本身就是一个指针,指向src的首地址,使用src就可以输出了,而如果&src则是代表指针自己的储存位置(src地址的地址),因此错误!!
printf("%s\n",src);//正确
printf("%s\n",&src);//错误
正常:int a=3;
printf("%d",a); =>3
printf("%d",&a); =>a的地址
3、char src[]表示字符串
char src[]="qwertyu";使用src[i]获取第i个字符:
cout<<src[0]<<" "<<src[1]<<" "<<src[2]<<endl;
使用src获取整个字符串:
cout<<src<<endl;
使用&src获取首地址:
cout<<&src<<endl;
在使用printf时,加不加&都是可以的:
printf("%s\n",src);//正确
printf("%s\n",&src);//正确
src+i,代表第i个字符:
char src[]="qwertyu";
cout<<src+1<<endl;
4、内存占用空间比较:
char *src="qwertyu";
cout << sizeof(src)<<endl;
输出为4 说明*src为字符串,占用4个字节
char src[]="qwertyu";
cout << sizeof(src)<<endl;
输出为8(7个字符+1个\0)5、求字符串中字符的个数:
使用string.h中的库函数:srelen求字符串的长度:
char *src="qwereeyu";
cout << sizeof(src)<<endl;
输出8
改成 char src[]="qwereeyu";结果一样
6、char *[]字符串数组的元素个数:
char *m[]={"a", "hello"};
cout<<sizeof(m[0])<<endl; //这里求得的是一个的元素占用的空间大小(4字节,为默认char类型字符串分配4字节)
cout<<sizeof(m)<<endl; //这里求得是m二维数组占用的空间总大小(8字节)
cout<<sizeof(m)/sizeof(m[0])<<endl;//这里是求m数组一共有多少个字符串元素
char m[2][10]={"a", "hello"}; //需指定每一个元素占用的字节
char **m={"a", "hello"}; //错误!!不要使用这种方法
cout<<sizeof(m[0])<<endl; //输出10 位自己指定的
cout<<sizeof(m)<<endl;
cout<<sizeof(m)/sizeof(m[0])<<endl;
最最最重要!!!
char dst[]="fsdfsd";//这里的字符串都在栈区,可以被改变
char *src="fsdfsd";//这里的字符串放在常量区(不能改变),而dst放在栈区,当改变字符串的值时程序会崩溃!!
例如 执行:dst[0]='1'; 没有问题
但是执行 src[0]='1'; 程序就会崩溃!!
因此若调用函数对字符串进行修改时,应该定义成dst[]的形式,而不能是*dst的形式!!
关于这两个函数的具体区别:
http://blog.sina.com.cn/s/blog_47fa4cef0100hgnj.html
关于这两个函数的具体区别:
http://blog.sina.com.cn/s/blog_47fa4cef0100hgnj.html
调用strcpy函数:
int main()
{
char src[]="qwereeyu";
char dst[]="fsdfsd";
scy(src,dst,3);
cout<<dst<<endl;
return 0;
}
在函数中,都是使用的指针,包括形参也是,因此都是对同一个src和dst进行操作,没有问题。
char *scy(char *src, char *dst, int size_n)
{
int a=strlen(src);
int b=strlen(dst);
if(a<size_n)
{
cout<<"error"<<endl;
return "null";
}
cout<<a<<b<<endl;
for(int i=0;i<size_n;i++)
{
// *dst++=*src++;
dst[b+i]=src[i];
}
return dst;
strcpy函数的专业实现:
http://blog.csdn.net/gpengtao/article/details/7464061/
0 0
- c++中的char* 和char[]的使用
- char* c和char c[]的区别
- C++:char* 和 char[]
- c 中char * 和 char []的区别
- 浅析char*和char c[]
- c中有关char *p 和char a[6] ,char a[] char a[0] 的区别
- char*数组(c类型字符串)和Vc++中的CString的转换,char*数组等问题
- JAVA中的char与C语言中char的区别
- C/C++--char *s 和 char s[] 的区别
- C/C++--char *s 和 char s[] 的区别
- C/C++--char *s 和 char s[] 的区别
- [C/C++] char[]和char*变量的==比较
- 【C/C++】对char* 和 char[]区别的一些理解
- CString 与 char * 和 const char*的转换,以及在Unicode项目中的使用.
- C语言中的BYTE和char
- ARM中的char和X86的char的不同点
- map<char *, char *>的使用
- char* 和 char[]的区别:
- 第六届蓝桥杯C/C++A组第一题解答
- 设计模式(四)原型模式(Prototype)-创建型
- 多益的笔试题
- 第七周项目三-思维导图
- 改变UIALertView中button的字体颜色
- c++中的char* 和char[]的使用
- Python在ubuntu上面的安装,遇到的问题,以及一些有用的python库安装
- Ext类型文件系统,文件删除恢复
- HDU 1423 动态规划—最长公共上升子序列
- vb.net版机房收费系统重构的成长历程(数据库设计篇)
- Android学习 - 屏蔽home实现(android4.0)
- 【iOS开发-quartz2d】关于drwRect方法
- [LeetCode]Roman to Integer
- 指向函数的指针