网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
一、字符串数组的初始化
我们通常使用下面的code进行字符串数组的初始化:
const char arr[] = "Cong Shan Ruo Shui de Blog";
//或者
const char \*pt = "Cong Shan Ruo Shui de Blog";
以上两个声明表明,pt与arr都是该字符串的地址。在这两种情况下,带双引号的字符串本身决定了预留给字符串的存储空间。尽管如此,这两种形式不完全相同。
二、“const char arr[] = 字面量 ”与“const char *pt = 字面量 ”的区别
其实本质就是数组与指针的区别
2.1 对于“const char arr[] = 字面量 ”
以上面的声明为例子,数组形式(arr[])在计算机的内存中分配为一个内含27个元素的数组(加上吗,末尾的‘\0’),每个元素被初始化为字符串字面量对应的字符。
通常,字符串都作为可执行文件的一部分存储在数据段中。当程序载入内存的时候,也载入了程序中的字符串。字符串存储在静态存储区(static memory)中。
但是,程序在开始运行时才会为该数组分配内存。此时,才将字符串拷贝到数组中。注意,此时字符串有两个副本。一个是在静态内存中的字符串字面量,另一个是存储在arr数组中的字符串。
arr是一个常量,不能使用自增访问,但是可以使用类似arr+1的操作
2.2 对于“const char *pt = 字面量 ”
指针形式(*pt)也使得编译器为字符串在静态存储区预留了27个元素的空间。另外,一旦开始执行程序,它会为指针变量pt留出一个存储位置,并把字符串的地址存储在指针变量中。该变量最初指向该字符串的首字符,但是它的值可以改变。
指针pt是变量,所以可以使用递增运算符
大家看一个例子
#include<stdio.h>
#define MSG "Cong shan ruo shui"
int main()
{
const char arr[] = MSG;
const char \*pt = MSG;
printf("address of \"Cong shan ruo shui\":%p\n","Cong shan ruo shui");
printf("address of arr :%p\n",arr);


**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.youkuaiyun.com/topics/618668825)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**