8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

C:字符指针和数组之间的区别

SiddheshDesai 1月前

177 0

考虑:char amessage[] = \'now is the time\';char *pmessage = \'now is the time\';我从《C 编程语言》第 2 版中读到,上述两个语句并不执行相同的操作。我总是……

考虑:

char amessage[] = "now is the time";
char *pmessage = "now is the time";

我从 《C 编程语言 》第 2 版中了解到,上述两个语句的作用并不相同。

我一直认为数组是一种操作指针来存储某些数据的便捷方式,但显然事实并非如此......C 语言中数组和指针之间有哪些“非平凡”的区别?

帖子版权声明 1、本帖标题:C:字符指针和数组之间的区别
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由SiddheshDesai在本站《c》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 这是一个假设的内存映射,显示了两个声明的结果:

                    0x00  0x01  0x02  0x03  0x04  0x05  0x06  0x07
        0x00008000:  'n'   'o'   'w'   ' '   'i'   's'   ' '   't'
        0x00008008:  'h'   'e'   ' '   't'   'i'   'm'   'e'  '\0'
            ...
    amessage:
        0x00500000:  'n'   'o'   'w'   ' '   'i'   's'   ' '   't'
        0x00500008:  'h'   'e'   ' '   't'   'i'   'm'   'e'  '\0'
    pmessage:
        0x00500010:  0x00  0x00  0x80  0x00
    

    字符串文字“now is the time”作为 16 元素的 char 数组存储在内存地址 0x00008000 处。此内存可能不可写;最好假设它不可写。您永远不应尝试修改字符串文字的内容。

    宣言

    char amessage[] = "now is the time";
    

    在内存地址 0x00500000 处分配一个 16 元素的 char 数组,并将 字符串文字的 内容 随心所欲地 消息

    strcpy(amessage, "the time is now");
    

    宣言

    char *pmessage = "now is the time";
    

    在内存地址 0x00500010 处分配一个指向 char 的指针,并将 字符串文字的 地址

    由于 pmessage 指向字符串文字,因此不应将其用作需要修改字符串内容的函数的参数:

    strcpy(amessage, pmessage); /* OKAY */
    strcpy(pmessage, amessage); /* NOT OKAY */
    strtok(amessage, " ");      /* OKAY */
    strtok(pmessage, " ");      /* NOT OKAY */
    scanf("%15s", amessage);    /* OKAY */
    scanf("%15s", pmessage);    /* NOT OKAY */
    

    等等。如果您将 pmessage 为指向 amessage

    pmessage = amessage;
    

    那么它就可以在任何 可以使用 消息的

返回
作者最近主题: