一.字符 字符串 指针字符

目录

在学习c语言的过程中,字符是一个特殊的类型,它可被变量接收,可以组合成串被数组接收,被指针接收,在学习中时长会造成问题,下面是对于字符问题的一些整理,还有许多地方没有做到位日后补充。

1.字符

2.字符串

3.字符指针

4.总结


在学习c语言的过程中,字符是一个特殊的类型,它可被变量接收,可以组合成串被数组接收,被指针接收,在学习中时长会造成问题,下面是对于字符问题的一些整理,还有许多地方没有做到位日后补充。

1.字符

如下:

 char ch1 = 'a';

其中,'a'表示一个字符,在赋值给一个char类型变量时使用单引号

sizeof运算符

语法:sizeof(类型名/变量名)

代表存储属于类型名/变量名的值所需要的字节数,只关注所占空间大小

char类型的大小

ch1变量的大小

字符的输出

printf("%c\n",ch1);

%c用来表示字符的输出

ASCII码表

当今最常见的字符集,在VS编译器中使用。

字符在编译器中用ASCII码中的对应整数来表示

2.字符串

用一对双引号括起来的字符序列

如下:

char ch2[] = "abcd";

在c语言中,字符串作为数组来处理。

其中,‘abcd’表示一个字符串,在赋值给一个char类型数组时使用双引号

上述代码相当于,字符串在数组中存储:

char ch2[5] = { 'a','b','c','d','\0' };
  • 字符串变量的声明中可以省去它的长度,编译器会自动计算长度

ch2数组的大小

输出为5,此时ch2所占空间为5个字节

分别为:

 

字符串的输出

printf("%s\n",ch2);

%s用来表示字符串的输出

字符赋值给数组:

char ch2[5] = { 'a','b','c','d' };
 printf("%s\n",ch2);

 给出数组大小为5时,ch2[4]的位置为空,编译器会自动填充字符'\0'终止打印

 

若不给出多余空间存储终止字符'\0'

char ch2[] = { 'a','b','c','d' };
printf("%s\n",ch2);

打印出为字符串及一串乱码

 因为没有终止字符,打印时会沿着内存一直打印,直到遇到\0

字符串使用字符变量存储

char ch2[] = "abcd";

  • 字符变量ch的空间大小为1,表示字符变量的大小是固定的无法改变(其它类型变量相同)
  • 此时如果打印的是字符串,系统会直接跳过,无法输出,一个字符变量空间无法容纳字符串
  • 此时打印的为字符,如图所示,输出为一个随机字符

3.字符指针

如下:

char* ch3 = "abcde";
char* ch4 = 'a';

指针变量大小及输出

#include<stdio.h>
 ​
 int main()
 {
     char* ch3 = "abcde";
     char* ch4 = 'a';
     char* ch5[] = {'a','b','c','d'};  //错误写法,指针数组只能接收首元素
 ​
     printf("%d\n", sizeof(ch3));
     printf("%d\n", sizeof(ch4));
     printf("%d\n", sizeof(char*));
 ​
     printf("%s\n", ch3);
     printf("%c\n", ch4);
     printf("%s\n", ch5);
 ​
     return 0;
 }

指针变量空间大小

所打印指针变量空间大小,为指针类型的大小,所有类型指针变量相同

所有指针变量的大小都是存储地址的大小,地址需要多大空间,指针变量就有多大空间

32位机器上,一个地址是需要32个二进制位,存放一个地址,需要32个bit位,指针大小是4个字节

64位机器上,一个地址是64个二进制位,存放一个地址,需要64个bit位,指针的大小位8个字节

指针变量的打印

字符串赋给指针变量后,指针指向的为字符串首元素的地址,此时,指针可以作为字符串数组使用。

当使用指针数组接收字符串时,指针接收的也是首元素地址,所以输出为首元素。

但是:

字符串赋值后,指针变量不可以在被修改

4.总结

  1. 字符由字符变量,字符指针接收

  2. 字符串由字符数组接收,由字符指针变量接收

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

榶曲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值