美文网首页
char *str 和char str[]的区别

char *str 和char str[]的区别

作者: 越来越胖了 | 来源:发表于2019-12-27 11:06 被阅读0次

    首先看例子:

       char *str1 = "abcd1234";
        char *str2 = "abcd1234";
        char str3[] = "abcd1234";
        char str4[] = "abcd1234";
        printf("%p %p\n",str1,str2);//地址一样
        printf("%p %p\n",str3,str4);//地址不一样
    
    //**************************************************
     //用strncpy来进行测试,意思为将str2的前四个字节的内容复制到str1中
        char *str1 = "abcd1234";
        char str2[20] = "efgh5678";
        char str3[30] = "";
        if(1){
            strncat(str3,str2,4);//  strncat(str1,str2,4) 崩溃
        }else{
            strncat(str2,str1,4);//正常
        }
        printf("%s\n",str1);
        printf("%s\n",str2);
        printf("%s\n",str3);
    
    

    char str[]:这里面的str表示一个char类型的数组指针,该指针所指向的数组内容是保存在栈上面的,是可以修改的。

    而char*str是一个字符串指针,这个指针指向的是字符串第一个字符的地址,而这个指针存在栈上,但是字符串的内容并不在栈里面,而在字符常量区域里面储存。

    所以查看char *str1 = "abcd1234"与char *str2 ="abcd1234"的地址时,他们都是储存的字符a的地址,所以这个地址时相同的,所以其 %p 的值也是一样的;

    但是char str3[] = "abcd1234" 与 char str4[] = "abcd1234"是分别两个char类型的数组,而str3与str4分别表示的是char型的数组指针,所以他们的地址时不同的。

    下面是字符串的翻转的方法:

    
     char ch[] = "12345678";
     char_reverse(ch);
    
    //方法:
    void char_reverse(char *cha){
        
        // 定义第一个字符
        char *begin = cha;
        // 定义个末尾
        char *end   = cha + strlen(cha) - 1;
        while (begin < end) {
            // 核心逻辑 -- 值换 移动
            char lg_tmp = *begin;
    //        *(begin++)  = *end;
            *(begin)  = *end;
            begin++;
            
            *(end)    = lg_tmp;
            end--;
            
            🔥修改对应地址指针的值: begin是把前四个地址位上的数据变成了 变成8765    
              end是把后面四个地址位上的数据 变成了4321
              能够理解这个写法,应该就掌握的差不多了;        
    
        }
    }
    
    ``
    

    相关文章

      网友评论

          本文标题:char *str 和char str[]的区别

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