关于c/cpp内存存储中常量与指针的类型

辨析

下面两种类型

  char* a = "abc"; //①
  char b[] = "123"; //②  123\0
  char arr[14] = "ABC"; //③
  strcat(arr, a); 

上面2与3相同,只是相等一个是预留长度,一个是实体长度,但是好像如果对于2只是声明,没有赋值,那么好像就相等于是指针

分析

1在vs22中是有问题的,确实也不规范,因为abc为const,存储到常量区,你一个变量指针,标准还的是const char* a = "abc"

a只是个指针,如上面定义程序运行就执行到栈区,"abc"为常量

   char* a = "abc"; //①
  char b[] = "123"; //②  123\0
  char arr[14] = "ABC"; //③
  strcat(a, arr); 

上面这个程序就有问题 “abc” 为常量,在常量区,a指针在栈区,常量不能更改,所以strcat报错

参考

博客园
csdn

posted @ 2023-04-04 20:13  壹剑霜寒十四州  阅读(8)  评论(0编辑  收藏  举报