• char* 和 cha[]


    char* s1 = "hello";//字符串常量

    s是一个保存了字符串首地址的指针变量,同时也是字符串的名字,s的内容是第一个字符的地址,当s指向常量字符串时候,内容不能改变(s[1]='y';错的!因为s[1]就是第二个常量字符的地址,这个地址是唯一的,不能改变!),但是整体可以修改(s = "addd"就可以)。

    cout << s1 ;// "hello"
    cout << *s1; //'h'
    cout << s[0]; // 'h'
    cout << *(s1+1); // 'e'

    char 2s[] = "goodbye";//字符数组

    char s2[]是有连续内存的数组,每个元素是char类型;s2指向的内存区域的地址和容量在生命期里不会改变,但数组里存的内容可以改变。

    13 //s2操作同s1类似
    14 s2 = s1;//错误!!!数组不能用等号赋值(除了初始化)
    15 s1 = s2;//

    两者在内存里都在末位存了‘’

    作为形参完全相同:

    void function(char* s1);
    void function(char s1[]);

    为什么改变s1危险?

    hello字符串是在编译时候就确定了,所以编译器知道它指的是常量,而且不希望你改变;但是数组只是个存储工具,编译时不知道它里面是什么,所以可以改。

    int a=0;    //全局初始化区
    char *p1; //全局未初始化区
    main()
    {
         int b;                  //
         char s[]="abc";  //
         char *p2;           //
         char *p3="123456";   //123456在常量区,p3在栈上。
         static int c=0;     //全局(静态)初始化区
         p2 = (char*)malloc(20);   //分配得来得10和20字节的区域就在堆区。
         strcpy(p1,"123456");   //123456放在常量区,编译器可能会将它与p3所向"123456"优化成一个地方。
     }

    获取字符串长度

    sizeof

    当参数是数组名时,返回的时候数组内元素的个数,包括'';

    当时其他变量时候,返回的是变量所占的字节数;

    char *str1="absde";
    char str2[]="absde";
    
    int len1 = sizeof(str1);//4,因为str1是字符指针变量,占4个字节
    int len2 = sizeof(str2);//6,str2是字符数组名,当sizeof参数是数组名时,返回数组长度(包括'')=6

    所以求字符串常量的长度,使用strlen;求字符数组的长度,使用sizeof,strlen都可以。

    strlen

    参数必须是字符型指针,当数组名作为参数传入时,实际上数组就退化成指针了。

    返回字符串的长度,而strlen不区分是数组还是指针,就读到为止返回长度。而且strlen是不把计入字符串的长度的

    char *str1="absde";
    char str2[]="absde";
    
    int len1 = strlen(str1);//5,strlen不包含''
    int len2 = strlen(str2);//5,strlen不包含''
  • 相关阅读:
    AS将一个项目导入到另一个项目中
    Android Studio出现:Cause: unable to find valid certification path to requested target
    小米手机Toast带app名称
    PopupWindow 点击外部区域无法关闭的问题
    EditText inputType类型整理
    Fragment通过接口回调向父Activity传值
    Android selector一些坑
    Installation failed with message Failed to commit install session 634765663 with command cmd package
    旷视上海研究院机器人方向招聘
    语义SLAM的数据关联和语义定位(四)多目标测量概率模型
  • 原文地址:https://www.cnblogs.com/pacino12134/p/11264416.html
Copyright © 2020-2023  润新知