C语言看图说话之字符在屏幕上的显示原理

以下内容为自学笔记缺乏严谨性,如有错误和不足请大佬指正

(1)字符数组与字符串的区别?

字符串要有结束标记'\0',有'\0'的字符数组才能叫字符串,打印时读到'\0'就结束,在字符数组初始化时比如char str[]="abc",会默认在结尾加个'\0',数组长度为4因为'\0'也占一个字符

char arr[10]={'a','b','c'};        其他元素默认0因此打印时也可以正常结束

char arr2[5];        arr2[0] = 'a';  arr2[1] = 'c';  arr2[1] = 'f';

打印时arr2就不可以正常结束,因为没有'\0',其余元素也没有进行初始化

char arr3[]={'a','b','c'};        由于[]中没有给值所以arr3的长度是根据给的元素的个数算的,也就是3自然也就不会有0,所以arr3不能正常结束打印

(2)字符串常量的创建过程?

char str[]="abc"时,首先会在常数区创建一个字符串常量"abc","abc"代表的是字符串常量在常数区的地址,再将字符串常量拷贝进栈区的str字符数组

(3)char *p = "abc"; *p-=32;的bug原因?

"abc"是字符串常量,p只是指向这个常量的指针,而常量是不可被修改的所以会报错.

(4)char str[] = "abc"与char *str = "abc"的区别?

char str[]="abc"首先会在常数区创建一个字符串常量"abc","abc"代表的是字符串常量在常数区的地址,再将字符串常量拷贝进栈区的str字符数组

sizeof(str)得到是数组空间大小

可以str[偏移量]来对栈区数组内的元素改变

数组名是地址常量str的指向不可以改变,他只能指向数组在栈区的地址


char *str = "abc"只是创建了一个叫str并指向这个常量的指针

sizeof(str)得到是指针空间大小

无法通过指针str来改变常数区的字符串常量

str可以改变指向

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值