作者:qxl 邮箱: 1183129553@qq.com
系列文章链接
前言
为了深入理解C++,并时常回顾学过的知识点,对C++知识点进行记录总结。参考1
一、字符指针、字符数组
字符指针
字符指针的存储方式:字符指针变量本身是一个变量,用于存放字符/字符串的首地址。字符串本身是存放在以该首地址为首的一块连续的内存空间中,并以’\0’结束。字符和字符串的存储方式本质上并没有区别。
char *ps = "C language"
存储顺序:1. 分配内存给字符指针 2. 分配内存给字符串 3. 将字符串首地址赋值给字符指针
在c语言中通过%c和%s来控制是输出单个字符还是字符串。
字符数组
char str[] = "I am happy";//系统自动加入'\0'
字符数组域字符指针的存储方式似乎并没有实质上的差别。
二、字符串指针
string str[] = {"hello", "world"}
三、(字符串)指针数组
#include <stdio.h>
void main()
{
char *str[] = {"Hello", "C++", "World"}; //char (*str)[] = ...
int i;
for(i=0; i<3; i++)
printf("%s\n", str[i]);
}
// str[0]字符串"hello"的首地址,str[0]+1:字符串"hello"第二个字符'e'的地址,str[2]=str+2:第三个字符串"world"的首地址
// str[1]字符串"C++"的首地址
// str[2]字符串"world"的首地址
四、常用方法
char *argv:理解为字符串
char **argv:理解为字符串指针
char *argv[]:字符串指针数组
常用方法:
int main(int argc, char*argv[])
第一个参数表示传入的需处理的元素个数,第二个表示传递字符串数组地址。
char* a和char a[]
- 相同点:a 都是指针,只想char类型
- 不通点:char a[] 把内容存在stack。char *a则把指针存在stack,把内容存在constants。
char * a[10] 和 char a[10][20]
- 相同点 : a 都是2级指针, *a 表示一级指针, **a 表示内存中存储的内容。
- 不同点 : char * a[10], 数组由char * 类型的指针组成; char a [10][20] 表示一位放10个元素, 二维放20个元素, 值存放地是一块连续的内存区域, 没有指针。