字符串数组char[]和字符串指针char*的讨论
来源:互联网 发布:php if else 简写 编辑:程序博客网 时间:2024/05/17 07:39
相同点
1.char *a ,和char a[]在作为形参的时候完全相同。
2.在初始化时,都可以使用常量字符串,
区别
1.内容地址不同
char * a = “abcd”;
此时“abcd”存放在常量区,然后在栈上分配内存给a,并指向“abcd”在常量区的首地址。对于指针本身a来说,它是可变的,允许修改,可以指向其他的地址。但是a所指向的内容为常量,不可以改变它。
char a [] = “abcd”;
此时”abcd”存放在栈上,可以访问和修改,数组名a对应着(而不是指向)一块内存,其地址与容量在生命周期内保持不变,只有数组的内容可以改变。
2.赋值时刻
char * a = “abcd”; 编译时就确定了
char a[] = “abcd”; 运行时确定
3.赋值方式
这个其实是第一条的一个细化
对于字符数组char a[10],a = “i love you”;是不可以的,a代表了首地址,地址是确定的。
对于字符指针char * a, a = “i love you”;是可以的,相当于指向另一个常量的首地址
4.初始化方式
对于字符指针:
1,char * a = “i love you”;
2,char *a; a = “i love you”
对于字符数组:
1,char a[] = “i love you”;
内容复制和比较
数组与数组
char a[] = “hello”;
char b[10];
strcpy(b,a); //而不是b = a;
if(strcmp(b,a) == 0); //不是if(b==a)
指针和数组
int len = strlen(a);
char * p = (char * )malloc(sizeof(char ) *(len +1)) ; //先要申请内存空间,再复制
strcpy(p,a); //不是p = a;
if(strcmp(b,a) == 0);
注意事项
1,字符数组的长度
char str[] = {‘i’, ’ ‘,’l’,’o’,’v’,’e’,’ ‘,’y’,’o’,’u’,’\0’};
char str[] = “i love you”;
是等价的。
但是char str[] = {‘i’, ’ ‘,’l’,’o’,’v’,’e’,’ ‘,’y’,’o’,’u’};就和上面的不同了,因为字符数组并不要求它的最后一个字符为’\0’,两者长度上相差1。
2,sizeof()的不同
对于字符数组char str[10],sizeof(str)等于数组的容量(字节)。
sizeof(str) = 10;
char * p = str;
sizeof(p) = 4;得到是指针p本身的字节数,相当于sizeof(char *)
特别需要注意的是:
当数组作为函数参数传递的时候,数组都作为指针来看待
void fun(char str[100])
{
sizeof(str) = 4;//相当于sizeof(char *)
}
- 字符串数组char[]和字符串指针char*的讨论
- char a[](字符串数组)和char *a(字符串指针)区别
- char a[](字符串数组)和char *a(字符串指针)区别
- char a[](字符串数组)和char *a(字符串指针)区别
- 数组字符串与指针字符串的区别 char s[]="***" 和char *s="***"的区别
- 字符串与char数组的指针表示
- char数组 、char指针与字符串常量的比较
- char数组 、char指针与字符串常量的比较
- java的字符串和char数组
- 字符串和char数组的相互转换
- 字符串指针与char型指针数组
- 字符串指针与char型指针数组
- char*字符串 转 char数组
- char*和char[]字符串的区别
- char数组和char指针
- C 字符串数组和char*指针在做&操作时的区别
- char * 与 char [] 区别,char *[] 与 char[][]区别。字符串指针的数组与二维char数组区别。字符串常量赋予指针与字符数组区别。"字符串"等价于其首元素"字"的地址
- C语言:将输入的字符串(char* cp)存入字符指针数组(char * spa[])
- git与svn区别
- iOS画图的一些笔记CGContextRef
- 首次与python的感想
- JavaScript Number数字类型
- Eclipse下快速打开本地文件插件EasyExplorer
- 字符串数组char[]和字符串指针char*的讨论
- 深拷贝与浅拷贝,多态的好处,内存泄露与内存溢出区别,枚举类,javaweb中libraries区别
- Mac 下使用EasyPR的方法,CMake,OpenCV
- 一个方便形成如同网易新闻首页,控制器滑动翻页效果的控制器
- Java中List集合的遍历
- Spring AOP 详解
- asp.net中编写 windows 服务程序以及调用
- 在linux centos中加入中文输入法
- memcpy函数的用法