当前位置: 首页 > 知识库问答 >
问题:

C字符数组与字符指针的差异[重复]

丁阎宝
2023-03-14

我刚刚开始学习C语言,一直在阅读K.N.King关于编程语言的教科书。在关于字符串的一章中,他指出字符数组和字符指针在传递到函数方面几乎是一样的。然而,它们是不可互换的,这背后的原因之一是,可以修改字符数组中的字符,而字符指针指向字符串文字。然而,在他的早期教科书中,他指出C无论如何都会将字符串文本存储为一个字符数组,所以这不会使字符指针和字符数组相同吗?

提前谢谢!

共有1个答案

钦良弼
2023-03-14

当您声明这样的字符数组时:

char str[]="My String";

然后,如果堆栈内存中的数组未声明为全局数组,则为其分配内存。在堆栈内存中,可以修改数组的内容。

但是当您声明一个指向字符串的指针并通过指定一个字符串来初始化它时,比如:

char *ptr="My string";

然后,它为堆栈内存中的指针分配内存,但它保存的字符串地址位于代码内存中,不能修改

但是,由于您使用的是指针,而不是常量指针,并且它存储在堆栈中,因此您可以修改指针,这意味着您可以将它指向另一个内存,您正在更改指针本身的包含。但是,您不能更改内存的包含,因为它指向只读内存。

 类似资料:
  • 在下面的结构中,数组与指向字符的指针相比有什么好处: 或 我看到的一个优点是,使用更容易区分“未提供字符串”和“提供空字符串”,而且它比数组占用更少的空间。 此外,在这两种情况下,我可以初始化: 另一方面,我不能轻易地在上使用,它必须是分配内存上的有效指针。 那么,还有什么好处呢?

  • 指针概述 指针的概念 在计算机中,所有的数据都是存放在存储器中的。一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,例如int型占4个内存单元,char型占1个内存单元。为了正确地访问这些内存单元,必须为每个内存单元编上号,根据一个内存单元的编号即可准确地找到该内存单元。内存单元的编号也叫做地址。既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地

  • 问题内容: 我正在使用Swift 3,并且需要与C API进行交互,例如,C API接受以NULL终止的字符串列表 在Swift中,API的导入方式如下 在尝试使用类型转换数百次后,我还是无法完成这项工作。即使我传递通过编译的有效指针,它也会在运行时崩溃,提示无效的内存访问(在strlen函数中)。还是关于ARC的东西? 问题答案: 您可以像如何通过使用char **参数将Swift字符串数组传递

  • 这些声明有什么不同? 每种情况下的内存分配情况如何?

  • 主要内容:到底使用字符数组还是字符串常量C语言中没有特定的字符串类型,我们通常是将字符串放在一个字符数组中,这在《 C语言字符数组和字符串》中已经进行了详细讲解,这里不妨再来演示一下: 运行结果: https://www.xnip.cn https://www.xnip.cn 字符数组归根结底还是一个数组,上节讲到的关于 指针和数组的规则同样也适用于字符数组。更改上面的代码,使用指针的方式来输出字符串: 运行结果: https://ww

  • 问题内容: 我现在很无聊,正在做一些Java实践测试,因为我已经用Java编程了一段时间了。经过一个问题,我现在想知道以下两者之间的区别: 在Java IDE中键入此命令时,没有出现任何错误。我还没有尝试编译它们中的任何一个(尽管我过去主要使用自己,所以我知道其中一个可以奏效)。 那么,它们每个都可以编译吗? 如果是的话,有什么区别(如果有)? (对于性能而言,比不进行新的实例化还是要在幕后完成此