美文网首页C++
char* str 与 char str[]

char* str 与 char str[]

作者: Kai_Z | 来源:发表于2018-03-07 22:56 被阅读1次

    char* str = "HelloWorld"

    • "HelloWorld"字符串存储在全局静态只读区域,通过str修改任何一个字符是非法操作 (str[0] = 'h';//非法操作)

    例程

    #include <iostream>
    
    void printhello(void)
    {
        char *ptr1 = "HelloWorld";
        std::cout << "ptr1 address: "<< (void*)ptr1 << std::endl;
    }
    
    void printword(void)
    {
        char *ptr2 = "HelloWorld";
        std::cout << "ptr2 address: "<< (void*)ptr2 << std::endl;
    }
    
    int main()
    {
        printhello();
        printword();
        char *str1 = "HelloWorld";
        char *str2 = "HelloWorld";
        std::cout << "str1 address: " << (void*)str1 << std::endl;
        std::cout << "str2 address: " << (void*)str2 << std::endl;
        std::cout << "str1 " << ((str1 == str2) ? "equal to " : "unequal to ")
            << "str2" << std::endl;
        return 0;
    }
    //本人电脑的输出
    ptr1 address: 00953138
    ptr2 address: 00953138
    str1 address: 00953138
    str2 address: 00953138
    str1 equal to str2
    

    通过上面的例程,可以看出ptr1,ptr2,str1,str2全部指向同一块内存空间

    char str[] = "HelloWorld"

    • "HelloWorld"存储在栈中,相当于char str[11] ="HelloWorld";
    • 可以通过str修改"HelloWorld中的内容"(str[0] = 'h';//合法)

    例程

    #include <iostream>
    
    int main()
    {
        char str1[] = "HelloWorld";
        char str2[] = "HelloWorld";
        std::cout << "str1 "<< ((str1 == str2) ? "equal to " : "unequal to ")
            <<"str2"<< std::endl;
        std::cout << "str1 address: "<< (void*)str1 << std::endl;
        std::cout << "str2 address: "<< (void*)str2 << std::endl;
        str1[0] = 'h';
        std::cout << str1 << std::endl;
        return 0;
    }
    //输出结果
    str1 unequal to str2
    str1 address: 00F3FE6C
    str2 address: 00F3FE78
    helloWorld
    

    通过上面例程可以看出str1与str2指向不同的内存地址,且可以随意更改str1所指向的内存里的内容(str2也是一样)。

    void foo(char* p) 与 void foo(char p[])形参

    • 形参没有任何区别,都是要去传入一个char型指针

    例程

    #include <iostream>
    void foo(char* p)
    {
        p[0] = 'h';
        std::cout << p << std::endl;
        std::cout << (void*)p << std::endl;
    }
    
    void foo2(char p[])
    {
        p[0] = 'w';
        std::cout << p << std::endl;
        std::cout << (void*)p << std::endl;
    }
    
    int main()
    {
        //foo("HelloWorld"); //调用函数会产生错误
        //foo2("HelloWorld");
        char str[] = "HelloWorld";
        foo(str);
        foo2(str);
        system("pause");
        return 0;
    }
    //输出的结果
    helloWorld
    00D3FD9C
    welloWorld
    00D3FD9C
    

    相关文章

      网友评论

        本文标题:char* str 与 char str[]

        本文链接:https://www.haomeiwen.com/subject/tvnsfftx.html