一、字符数组

1、定义时进行初始化的方式

(1)char c[12]={'I',' ','a','m',' ','h','a','p','p','y'};//最后两个元素自动补‘\0’(不是空格),其ASCII码为0

(2)char c[]={'I',' ','a','m',' ','h','a','p','p','y'};//数组c长度自动定为10

(3)char c[12]="I am happy";////最后自动补‘\0’

(4)char c[]="I am happy";//数组长度为11,以为对于字符串常量,系统自动在最后加‘\0’

  与char c[]={'I',' ','a','m',' ','h','a','p','p','y','\0'}等价,与(2)中的不等价。

注意:前面所提到的都是sizeof(),它计算数组的实际大小;但strlen()计算的是实际有效的长度(‘\0’不计算在内)。

2、定义之后再赋值

  不能用上面的两种方式。应该:

char c[10];

c[0]='I';c[1]=' ';……

二、字符串处理函数

  用字符数组存放字符串时用字符串函数;用string变量存放字符字符串时可以用简单的运算符。

1、字符串连接函数strcat(char[],const char[]);(+)

2、字符串复制函数strcpy(char[],const char[]);(=)

3、字符串比较函数strcmp(const char[],const char[]);(>,<)

4、字符串长度函数strlen(const char[]);

三、对比

1、字符数组(腾讯笔试)

  1. #include <iostream>
  2. #include <stdio.h>
  3. using namespace std;
  4. int main(){
  5. char r[]="hello world";//是数组,而不是字符串常量,可以改变内容,如下面单独修改r[5]
  6. cout<<r<<endl;//输出hello world,直到遇到'\0'为止
  7. r[]=0x0;//相当于'\0'
  8. cout<<r<<endl;//输出hello
  9. cout<<*r<<endl;//输出h
  10. }

2、指向字符串的字符指针

  1. #include <iostream>
  2. #include <stdio.h>
  3. using namespace std;
  4. int main(){
  5. char *pstr="hello world";//pstr是指向字符串常量的指针
  6. cout<<pstr<<endl;//输出hello world
  7. pstr[]=0x0;//不可以改变字符串常量的值!!编译虽然通过,但是无法运行
  8. cout<<pstr<<endl;//无法运行
  9. cout<<*pstr<<endl;//无法运行
  10. }

3、字符串变量

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <string>//注意增加这条文件包含命令
  4. using namespace std;
  5. int main(){
  6. string str="hello world";//定义一个字符串变量str,并初始化
  7. cout<<str<<endl;//输出hello world
  8. str[]=0x0;//不可以!!
  9. cout<<str<<endl;//输出hello world
  10. //cout<<*str<<endl;//无法通过编译
  11. }

四、双重指针指向字符串数组(腾讯笔试)

  1. #include <iostream>
  2. #include <stdio.h>
  3. void fun(char** p){
  4. *p+=2;
  5. }
  6. int main(){
  7. char *s[] = {"hello","Basic","Foxpro","Visual Studio"};// 定义了一个指针数组。该数组中的每个元素都是指针,一共4个元素sizeof(s)=4*4=16
  8. char **p=s;//定义了一个指向指针的指针。
  9. printf("%d\n",sizeof(s));//
  10. printf("%d\n",sizeof(*s));//
  11. printf("%s\n",*s);//输出hello
  12. printf("%s\n",*s+2);//输出llo
  13. fun(p);//与fun(s);等价
  14. printf("%s\n",*s);//输出llo,与printf("%s\n",*p)相同
  15. printf("%c\n",**s);//输出l,与printf("%c\n",**p)相同
  16. printf("%s\n",*(s+2));//输出Foxpro,与printf("%s\n",*(p+2))相同
  17. printf("%c\n",**(s+));//输出F
  18. }

解析:s表示的是整个指针数组(一维)(加1的话表示移到下一行),*s表示的是指向行(加1的话只移动一个元素的位置),**s表示的是单个字符(加1就是修改元素值了)。

   p=s;所以p是指向指针数组首地址(也就是首元素地址)的指针(指向指针的指针)。

   调用fun()时,*p是指向行的(加1的话只移动一个元素的位置),*p+=2;使得地址值加2,(因为指向char型元素,所以实际地址加2*1),原来指向“hello”的首地址,加2后,指向"llo"的首地址。下图(图有错:s[0]指向不是“C”,而是“hello”)

五、虚函数、形参传数组时(细心啊!)

  1. #include <iostream>
  2. #include <stdio.h>
  3. using namespace std;
  4. class BASE{
  5. public:
  6. virtual int foo(int a){
  7. return a*;
  8. }
  9. int foo1(char a[]){
  10. return sizeof(a)+;
  11. }
  12. };
  13. class Derived :public BASE{
  14. public:
  15. int foo(int a){
  16. return a*;
  17. }
  18. virtual int foo1(char a[]){
  19. return sizeof(a)+;
  20. }
  21. };
  22.  
  23. int main()
  24. {
  25. Derived a;
  26. BASE* b = &a;
  27. char c[];
  28. cout<<b->foo()+b->foo1(c)<<endl;//输出2014
  29. }

解析:foo(100)因为Base中foo()是虚函数,所以调用子类中的foo():foo(100)返回100*20;

     foo1(c)因为Base中的foo1()不是虚函数,所以调用父类中foo1():foo(c)返回sizeof(c)+10=4+10。注意c经过传递变为了指针,大小为4!

C++中的字符数组、字符指、字符串针(腾讯)的更多相关文章

  1. java字符数组char[]和字符串String之间的转换

    java字符数组char[]和字符串String之间的转换 觉得有用的话,欢迎一起讨论相互学习~Follow Me 使用String.valueOf()将字符数组转换成字符串 void (){ cha ...

  2. JPasswordField 中得到的字符数组转化为字符串(密码乱码问题)

    转载自:http://blog.csdn.net/skl_tz/article/details/9009805 JPasswordField 用作密码的输入框,似乎很方便,但是,为了得到输入的内容,一 ...

  3. qt 字符数组如何转换字符串?

    char 字符数组如何转换成 QString? char source{1024} = {0}; QString des = QString::fromLocal8Bit(source);

  4. c语言中的字符数组与字符串

    1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y ...

  5. C语言中的字符数组和字符串

    在C语言中,没有字符串类型,但是可以通过字符数组来模拟字符串. 字符串可以在栈上,堆上,静态区和常量区进行分配. char buf[50]  = "abc"; char buf[] ...

  6. C语言中整形数组、字符数组、字符串的区别

    一. 第一 整型数组的存放,数组最后是不加'\0'的,字符串会自动加上,因此存放字符的时候数组的大小要比实际字符的多一个 第二 整型数组 每一个单元是4个字节的,字符串是一个一个字符存放的,每个字符占 ...

  7. java中字符数组与字符串之间互相转换的方法

    public static void main(String[] args) { //1.字符数组 转换成 字符串 //(1)直接在构造String时转换 char[] array = new cha ...

  8. C语言字符串与字符数组

    字符串儿与字符数组 字符数组的定义: Char buffer[]; 字符数组初始化: Char buffer1[]="hello world"; 利用scanf输入一个字符串儿 代 ...

  9. [c语言]字符数组、字符串定义

    C语言中字符串通常用字符指针和字符数组来定义: char* pS="abcdef"; char s[]="abcdef"; 这两种方式都会在结尾为字符串隐式补结 ...

  10. c语言指针字符串与字符数组字符串的区别

    #include <stdio.h> int main() { //字符串常量,存放于内存常量区. //常量区区的内存具有缓存机制, //当不同指针指向的常量值相同时, //其实这些指针指 ...

随机推荐

  1. jeecg bpm流程节点流程节点配置

    流程节点 流程节点 cgFormBuildController.do?ftlForm&tableName=jform_leave&mode=onbutton&ftlVersio ...

  2. FileSystemWatcher监听文件事件

    现有一个需求如下:监控某个目录中的文件修改,创建,删除等信息,并记录下来. 这里用到FileSystemWatcher类.由于考虑到文件的写入量会很频率,所以考虑先将监听到的消息记录到内存中. 监听部 ...

  3. Ubuntu系统挂载磁盘硬盘

    在电脑(Ubuntu16.04)新装了一个硬盘,然后只有挂载了我们才能正常使用,下面总结一下挂载的过程. 首先,打开命令行输入命令: sudo fdisk -l 可以看到:磁盘格式化后 硬盘格式化 命 ...

  4. 【VS开发】【图像处理】相机中白平衡的算法模拟实现

    相机主要技术点为3A算法. 而3A算法主要指的是自动对焦(AF).自动曝光(AE)及自动白平衡(AWB).自动白平衡:根据光源条件调整图片颜色的保真程度. 网上时常有类似招聘如下的招聘信息: ---- ...

  5. Dialupass v3.20 汉化绿色版 显示查看拨号上网密码

    Dialupass 显示查看拨号上网密码 拨号上网的密码不小心丢了怎么办?这个工具可以帮你!在紧要关头,它会让你体验到它的奇效!有备无患,快收藏这个小东东吧. 这是一款拯救忘记了拨号网络密码的使用者的 ...

  6. 使用Spring Initializr初始化SpringBoot项目

    虽然SpringBoot CLI消除了不少设置工作,但如果你更倾向于传统的Java项目结构,那你应该看看Spring Initializr. Spring Initializr从本质上来说就是一个we ...

  7. linux netstat 查看端口

    1. netstat命令用于显示系统的网络信息,包括网络连接 .路由表 .接口状态2. 一般我们使用 netstat 来查看本机开启了哪些端口,查看有哪些客户端连接 [root@localhost ~ ...

  8. 【转帖】大话Spring Cloud

    springcloud(一):大话Spring Cloud 2017/05/01   http://www.ityouknow.com/springcloud/2017/05/01/simple-sp ...

  9. webpack的介绍

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA5EAAAGpCAIAAACbBiUBAAAgAElEQVR4Aey9CVwb553/L04JcSPuw5

  10. CF 631B 题解

    题面 注意到每次只染色一行或者一列,那么我们最后输出第i行第j列的数字是多少的时候只需要看一下最后一次i行和第j行被染了什么颜色,所以我们需要对每一行和一列记录最后一次染色的颜色. 但是我们也需要比较 ...