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

本文深入探讨C++中字符和字符串的使用,包括char类型存储单个字符,char数组存储多个字符及字符串,以及字符指针的应用。解析字符串初始化、修改及复制的方法,对比字符数组与字符指针的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:https://blog.youkuaiyun.com/modi000/article/details/80691726

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 * 相比在形式上多了这种赋值方式:
#include <stdio.h>
int main(int argc,char *argv[]){
    int j = 10;
    int *i= &j;//赋值的是一个地址
    printf("%d\n",*i);
    char ch[]= "hello world!";//ch保存了字符串首字符的地址
    char *p = ch;//字符指针指向了字符串的首字符h
    *p = 'T';//这样是对的,因为字符指针p指向的是一个字符变量
    ch[1] = 'o';
    ch[2] = 'u';
    ch[3] = 'c';
    ch[4] = 'h';
    printf("%s\n",ch);
    return 0;
}
结果:
10
Touch world!

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

2)

#include <stdio.h>
int main(int argc,char *argv[]){
    char *ch = "hello world!";
    printf("%s\n",ch);
    return 0;
}
//char * 还可以直接赋值一个字符串常量!!!这个与int * 的不同之处。
//实质上"helloworld"返回的也是地址,而不是字符串常量本身。 

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

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

char ch[]= "hello";

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

char* strcpy(char *dst, const char *src);
#include <stdio.h>
#include <string.h>
int main(int argc,char *argv[]){
    char ch[6] = {0};
    printf("%s\n",ch);
    char *p = "hello";
    strcpy(ch,p);
    printf("%s\n",ch);
    return 0;
}
注意:dst是已经申请的内存单元,足够大的可修改的内存区域,
需能盛下src内的字符个数,并且不能是指向常量的字符串常量,
所以可以是字符数组char ch[6];也可以是new的内存
char *ch = new char[6];

但是不能是

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

总结:
1)字符指针既可以指向字符串,也可以指向某个字符变量
2)字符数组名是常量,故数组名不能++字符指针是个变量,故指针可以++
字符数组是变量的集合,故字符数组元素可以++;字符指针指向的是字符串常量,常量是不能++的,故*p++是错误的。

作者:modi000
来源:优快云
原文:https://blog.youkuaiyun.com/modi000/article/details/80691726
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值