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

59 篇文章 5 订阅

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”;//一般为了方便,不写数组元素个数//引号引起来的是字符串,默认结尾处有'\0'
char ch1[]=”world”;//存储在栈内存,内容可以被修改
char *ch2=”hello world”;//存储在常量区,内容不能被修改等价于const char *ch =”hello world”; 

 注意:ch2是一个局部指针变量,存储在栈中,而“helloworld”则是存储在常量区的。但是,ch,ch1以及其中的数组,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)++ 是错误的,相当于char *p=”hello”; h = h +1,同样,p[0]='m';也是错误的。

  • 18
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值