C语言中字符数组和字符指针的使用注意点

一、存储空间

字符数组:通常由字符串长度+1确定, 每个字符(包括’\0’)占用一个字节。
字符指针:存放字符串首地址,一般占用一个字长。

二、初始化

字符数组:

  1. 利用赋值语句对数组元素赋初值。
char name[10];
name[1] = 'w';	name[2] = 'o';	name[3] = 'r';	
name[1] = 'd';	name[1] = '\0';
  1. 利用库函数(如scanf()函数),由用户为字符数组输入初值。
char name[10];
scanf("%s", name);
  1. 用字符常量作为初值,对字符数组初始化。
char name[5] = {'w', 'o', 'r', 'd', '\0'}
  1. 用字符串直接给数组赋值
char name[10] {"Beijing!"}
char s[] = {"word"}
char c[] = "word"

初值的个数可以小于数组的长度,反之编译时会语法错误。

字符指针:

由字符串常量进行初始化。

char *pstr = "hello, world“;

三、赋值

字符数组:
只能对单个元素赋值,不能用字符串赋值。

char s1[100], s2[100] = "world";
s1 = s2;	//错误,应对s1每个元素逐一赋值,或者使用strcpy()函数
s1 = "believe";		//错误,字符串常量的存放按静态字符数组处理

字符指针:
可以用字符串赋值:

char *pstr;	//注意野指针
patr = "hello, world";

四、地址值

**字符数组:**定义的字符数组在编译时分配内存单元,有确定的地址。
**字符指针:**定义指针变量时为它分配内存单元,但它的值未初始化,即尚未指向具体字符数据。

五、可变性

字符数组:数组名是常量,其值不可变。
字符指针:字符指针变量时变量,其值可变。如 pstr++;

例子

#include<stdio.h>

int main()
{
    char s[] = "believe";
    char* sp = s;
    printf("sp = %s\n", sp);	//<<believe
    *(sp+1) = 'b';
    printf("s = %s\n", s);	//<<bblieve
    printf("sp = %s\n", sp);	<<bblieve
    sp = "betray";
    printf("sp = %s\n", sp);	//<<betray
    
    // *(sp+1) = 'b';	//错误,不能改变静态字符数组的值
    // printf("sp = %s\n", sp);
    
    return 0;
}

输出:

sp = believe
s = bblieve
sp = bblieve
sp = betray
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值