c语言中字符指针与字符数组的区别:

char 是用来存储单个字符的;

例如:

char ch=’a’;

char[]是用来存储多个字符的;

例如:

char ch[5]={‘h’, ‘e’, ‘l’, ‘l’, ‘o’};

//数组本质上就是同时定义了多个变量,并对变量进行初始化

当char[]最后一个字符为‘\0’的时候,这是一个字符串

例如:

char ch[6]={‘h’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’};

字符串也可以写成:

char ch[6]=”hello”;// char ch[]=”hello”;//一般为了方便,不写数组元素个数
char ch[]=”hello world”;//存储在栈内存,内容可以被修改
char *ch=”helloworld”;//存储在常量区,内容不能被修改等价于const char *ch =”hello world”; 

//char * 字符指针与int*相比在形式上多了这种赋值方式:

1)

int* i=&j;//赋值的是一个地址;
char ch[]=”hello world”;//ch保存了字符串首字符的地址
char* p=ch;// 字符指针指向了字符串的首字符h
*p =’T’//这样是对的,因为字符指针p指向的是一个字符变量

//这是char* 与int*的相同的地方;

2)

char* ch=”hello world”;

//char*还可以直接赋值一个字符串常量!!!这个与int*的不同之处。

//实质上”helloworld”返回的也是地址,而不是字符串常量本身。 

对字符串数组进行初始化的方法有两种:

1) 定义的时候直接初始化:

char ch[]=”hello”;

2)使用字符数组的拷贝函数

char* strcpy(char *dst, const char *src);
char ch[6];
char *p=”hello”;
strcpy(ch,p);

注意:dst是已经申请的内存单元,足够大的可修改的内存区域,需能盛下src内的字符个数,并且不能是指向常量的字符串常量,所以可以是字符数组char ch[6];也可以是new的内存

char *ch= new char[6];

但是不能是

char *ch;
strcpy(ch,p);//这样会报错!!!!  

总结:

1)字符指针既可以指向字符串,也可以指向某个字符变量

2)字符数组名是常量,故数组名不能++;字符指针是个变量,故指针可以++;

字符数组是变量的集合,故字符数组元素可以++;字符指针指向的是字符串常量,常量是不能++的,故*p++是错误的。

猜你喜欢

转载自blog.csdn.net/modi000/article/details/80691726
今日推荐