当前位置 博文首页 > 文章内容

    C语言字符串指针

    作者: 栏目:未分类 时间:2020-11-15 15:00:17

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    字符数组归根结底还是一个数组,上节讲到的关于指针和数组的规则同样也适用于字符数组。更改上面的代码,使用指针的方式来输出字符串:

     1 #include <stdio.h>
     2 #include <string.h>
     3 int main(){
     4 char str[] = "http://c.biancheng.net";
     5 char *pstr = str;
     6 int len = strlen(str), i;
     7 //使用*(pstr+i)
     8 for(i=0; i<len; i++){
     9 printf("%c", *(pstr+i));
    10 }
    11 printf("\n");
    12 //使用pstr[i]
    13 for(i=0; i<len; i++){
    14 printf("%c", pstr[i]);
    15 }
    16 printf("\n");
    17 //使用*(str+i)
    18 for(i=0; i<len; i++){
    19 printf("%c", *(str+i));
    20 }
    21 printf("\n");
    22 return 0;
    23 }

     

    运行结果:
    http://c.biancheng.net
    http://c.biancheng.net
    http://c.biancheng.net

    除了字符数组,C语言还支持另外一种表示字符串的方法,就是直接使用一个指针指向字符串,例如:

    1. char *str = "http://c.biancheng.net";

    或者:

    1. char *str;
    2. str = "http://c.biancheng.net";

    字符串中的所有字符在内存中是连续排列的,str 指向的是字符串的第 0 个字符;我们通常将第 0  个字符的地址称为字符串的首地址。字符串中每个字符的类型都是char,所以 str 的类型也必须是char *

    下面的例子演示了如何输出这种字符串:

     1 #include <stdio.h>
     2 #include <string.h>
     3 int main(){
     4 char *str = "http://c.biancheng.net";
     5 int len = strlen(str), i;
     6 //直接输出字符串
     7 printf("%s\n", str);
     8 //使用*(str+i)
     9 for(i=0; i<len; i++){
    10 printf("%c", *(str+i));
    11 }
    12 printf("\n");
    13 //使用str[i]
    14 for(i=0; i<len; i++){
    15 printf("%c", str[i]);
    16 }
    17 printf("\n");
    18 return 0;
    19 }

     

    运行结果:
    http://c.biancheng.net
    http://c.biancheng.net
    http://c.biancheng.net

    这一切看起来和字符数组是多么地相似,它们都可以使用%s输出整个字符串,都可以使用*[ ]获取单个字符,这两种表示字符串的方式是不是就没有区别了呢?

    !它们最根本的区别是在内存中的存储区域不一样,字符数组存储在全局数据区或栈区,第二种形式的字符串存储在常量区。全局数据区和栈区的字符串(也包括其他数据)有读取和写入的权限,而常量区的字符串(也包括其他数据)只有读取权限,没有写入权限。