热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【C/C++】字符数组:char,char*,chara[],char*a[],char**s的区别与联系/constchar*和char*的区别

一、char,char*,chara[],char*a[],char**s的区别与联系C语言中的字符串是字符数组,可以像处理普通数组一样处理字符串。

一、char,char*,char a[], char *a[], char **s 的区别与联系

C语言中的字符串是字符数组,可以像处理普通数组一样处理字符串。

可以理解为在内存中连续存储的字符。


  1. 从实用主义而言,我们先给出结论。

    我们会用到的一般有两种。

    · 声明一个字符串:char* a = "abcdefg";

    · 声明一组字符串:char* a[] = {"China","French","America","German"};


  2. 原理

    这里只考虑静态数组,在内存中划分了连续的地址空间。字符串以“\0”为结尾符。


  3. 地址/字符串的输出与查看

    假设a是一个指针变量,为了查看这个指针变量的内容,我们可以用%p输出查看。printf("%p",a);

    查看这个字符型指针变量的字符串:printf(%s,a);

    注意指针变量也是存在内存里的,自己也有个地址。用&a表示。


  4. char*

    很多资料中会写成char* a而不是char a,事实上我本科学C语言的时候一直认为是char (a),但其实前者可以一起理解:



char*: 用于声明一个只是保存字符串首地址的指针变量


  1. 符号优先度

    a[]的优先度大于*a。


  2. 指针与二级指针

    这里可以回到我们开头所说的两种定义了。

    第一种:

    · 声明一个字符串:char* a = "abcdefg";

    这个理解起来非常容易,定义了一个字符串"abcdefg",在连续的内存空间里存储,并且定义了一个保存这个字符串的首地址的指针变量a,所以a的值为字符’a‘所存的地址。

    如果我们用printf("%s",a),将输出abcdefg。

    · 声明一组字符串:char* a[] = {"China","French","America","German"};

    a[]是一个4长数组,里面存了四个指针变量:a[0],a[1],a[2],a[3]。分别指向字符串China,French,American和German的首地址。

    而a[]的值也就是a也就是这个数组的首地址,也就是a[0]的地址。

    ·二级指针

    二级指针就是指针的指针。在第二种声明中,我们用到的二级指针:

    a[0]是指向字符串China的指针,而a是指向a[0]的指针。

    二级指针的赋值与声明:char **s = a; //定义了一个名为s的二级指针,指向a的地址

    即,*s=a[0],也就是printf("%s",*s)


#include
#include
#include
#include
#include
using namespace std;
int main(){
char* a[] = {"China","French","America","German"};
printf("%p\n",a);
for (int i = 0; i <4; i++){
printf("a[%d] is %p\n",i, a[i]); //用于查看a[i]的内容(所指的目标的地址值)
printf("address a[%d] is %p\n",i, &a[i]); //用于查看a[i]自己的地址
//printf("%d\n",sizeof(&a[i]));
printf("%d\n",sizeof(a[i])); //用于查看a[i]自己的大小(指针变量的大小 4字节)
printf("%s\n",a[i]); //用于打印指针变量的字符串
}
char **s = a; //定义二级指针s
printf("%p\n",s); //输出s=a[0]的地址
printf("%s\n",*s); //输出*s=a[0]所指的字符串
cout < cout <<(*s)[2]; //i
system("pause");
}

运行结果:

【C/C++】字符数组:char,char*,char a[], char *a[], char **s 的区别与联系/const char*和char*的区别 - 文章图片

二、C语言中char* 和const char*的区别


推荐阅读
author-avatar
海容天色2602905655
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有