c语言学习day03

const char *p = "Hello world";//表明该字符串内容不可修改

char * const p;//操作硬件时用到,例如操作lcd的缓存,指向的位置不可变,但位置中的像素的数据在不断刷新,用来显示不同颜色

const char * const p;//常用来描述rom

volatile主要用来修饰指针,防止被优化。例如:volatile char *p

int *p;p+1的值是p+sizeof(int);和char *p;p+1的值不同,是p+sizeof(char)

指针不是同类型的比较没有意义,例如:int *p和char *p的值的大小比较没有意义

数组名是常量,int a[100],数组名不会放到等号左边,即a=xxx

char buf[100];

buf = "Hello World";//这行代码是有问题的,buf是常量

a[-100]也是可以的,只是偏移方向不同

int a[100] = {};//cpu本身不支持空间拷贝空间的运算,例如这行代码,但编译器会把这行代码编译为a[0] = xxx;a[1] = xxx;...

char buf[10] = "abc";内存中有两份abc,一份在常量区,一份在栈中

char buf[] = "abc";buf的长度为4,注意末尾有‘\0’

char buf[10] = "abc";
buf = "hello world";//该行错误,buf是常量标签,不能再次赋值

如果想对buf再次赋值,只能逐一赋值,即buf[0] = 'h',buf[1]='e'...buf[n+1] = 0

字符拷贝函数的原则就是上面的逐一拷贝,一遇到0,拷贝就结束

strcpy(buf,"Hello World");//带str的函数会把字符串末尾的‘\0’一同拷贝过去

strcpy拷贝的时候,如果源字符串的长度很大,目的字符数组长度不大,就会拷贝满,并且把字符数组挨着的内存也拷贝成数据,如果此时挨着的内存有重要数据,就会覆盖。这样就导致内存泄漏,所以strcpy在工程中严禁使用。此时就要使用strncpy

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值