天天看点

字符串指针变量和字符串数组的记录

1.字符串指针变量

首先明确:存放变量地址的变量为指针变量。

1.1 字符串指针变量的定义形式

char *p= "i like";
           

这里p就是一个字符串指针变量。p存放的是字符串“i like”的首地址。

1.2 通过字符串指针变量访问字符串的方式

char *p = "i like";
//打印i
cout<<p[0]<<endl;
//打印整个字符串"i like"
cout<<p<<endl;
           

我们可以通过指针变量带下标的方式访问字符串的具体元素。打印时直接写指针变量,那么c++编译器会从字符串的首地址开始打印,直到遇见“\0"停止。(注:每个字符串,c++编译器都会在其末尾加上“\0”)

1.3 字符串指针变量的注意事项

不能用指针变量带下标方式改变具体元素

char *p = "i like"
p[0] = "t"
//这个是错误的。因为p[0]是字符串常量,不可更改。
           

如果将一个字符串的值复制给一个开辟好空间的指针变量,利用strcpy函数

char *p = "i like"
char *t
t = new char[strlen(p)+1]
strcpy(t,p)
           

2 字符串数组

2.1 字符数组的定义方式

char k[] = "i love"
           

这里k[是一个字符数组。数组名是字符串的首地址。

2.2 字符数组的访问方式

char k[] = "i love";
//打印具体元素 i
cout << k[0]<<endl;
//打印整个字符串
cout<<k<<endl;
           

可以看到字符数组的访问方式和字符串指针变量相同。

2.3 字符数组的注意事项

与字符串指针变量不同的是,具体元素的改变

char k[] = "i love";
k[0] = p;
//这个是正确的,这里k[0]是一个char型变量
           

还有就是以下两种情况是不等价的

char k[6] = "i love";
//不等价于
char k[6];
k[6] = "i love";
           

但是字符串指针变量下面的情况是等价的

char *p = "i love";
//等价
char *p;
p = "i love";
           

参考链接:https://blog.csdn.net/Cheney012/article/details/84950350

https://blog.csdn.net/qq_41950229/article/details/83515267

https://blog.csdn.net/sandwich125/article/details/79161030