C语言中字符数组和字符串指针的区别

代码:

#include<stdio.h>

int main(){
    char * a = "qwer";
    char b[] = "qwer";
    printf("size of a is: %d\n",sizeof(a));
    printf("size of b is: %d\n",sizeof(b));
    return 0;
}

输出:

解释:

1.字符串指针

  • 存储在常量区
  • a只是一个char类型的指针,指向“qwer”的第一个
  • 能够用下标a[i]去访问qwer其中的一个,也能用*(a+n)去访问字符
  • 不能修改其中的单个字符,只能整体修改
  • sizeof(a)只能表示指针的大小,不能表示"qwer"占用的内存的大小

2.字符数组

  • 存储在全局数据区或栈区
  • b是一个数组,里面存储了"qwer",大小为4+1,其中的1代表'\0'
  • 能够通过下标b[i]去修改"qwer"其中的某个字符,也能用*(b+n)去访问字符
  • 字符数组最后一个一定是'\0',而其他类型的数组没有,比如char a1[] ='a';中printf(“%d”,sizeof(a1));的输出为2,因为a1中的'a'后面会自动加上一个'\0'
posted @ 2022-01-09 17:37  猪猪猪猪侠  阅读(148)  评论(0编辑  收藏  举报