天天看点

C++字符、字符串、字符数组、字符串指针、指针数组系列文章链接前言一、字符指针、字符数组二、字符串指针三、(字符串)指针数组四、常用方法参考

作者:qxl 邮箱: [email protected]

系列文章链接

一、C++ 字符、字符串、字符数组、字符串指针、指针数组

文章目录

  • 系列文章链接
  • 前言
  • 一、字符指针、字符数组
    • 字符指针
    • 字符数组
  • 二、字符串指针
  • 三、(字符串)指针数组
  • 四、常用方法
  • 参考

前言

为了深入理解C++,并时常回顾学过的知识点,对C++知识点进行记录总结。

参考1

一、字符指针、字符数组

字符指针

  字符指针的存储方式:字符指针变量本身是一个变量,用于存放字符/字符串的首地址。字符串本身是存放在以该首地址为首的一块连续的内存空间中,并以’\0’结束。字符和字符串的存储方式本质上并没有区别。

存储顺序:1. 分配内存给字符指针 2. 分配内存给字符串 3. 将字符串首地址赋值给字符指针

在c语言中通过%c和%s来控制是输出单个字符还是字符串。

字符数组

字符数组域字符指针的存储方式似乎并没有实质上的差别。

二、字符串指针

三、(字符串)指针数组

#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个元素, 值存放地是一块连续的内存区域, 没有指针。

参考

  • [1] C++ 字符、字符串、字符数组、字符串指针、指针数组