为什么声明字符串时不需要分配内存[重复]

2024-03-11

我是 C 新手,目前我正在尝试了解指针是如何工作的。

这是一个让我困惑的问题:

据我所知,在给指针赋值之前,应该为该指针分配一定的内存(如果我错了,请纠正我:)),如下面的代码:

int main(void) {
    int i;
    int * ptr = (int *)malloc(sizeof(int));

    i = 2;
    *ptr = 5;     
    printfn("%d",*ptr); 
    free(ptr);
}

但是,在 C 中声明字符串时,就像:

char *p = "Hello world"; 

无需分配内存。

原因是什么?它是如何工作的?如果我遗漏了什么,请提醒我。


char *p = "Hello world";

您创建了一个指针并将其指向一个常量字符串。编译器将其放入标记为只读的内存部分中。

它没有名称并且具有静态存储持续时间(意味着它在程序的整个生命周期内都存在);和一个指向字符的指针类型的变量,称为p,它是使用该未命名的只读数组中第一个字符的位置进行初始化的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么声明字符串时不需要分配内存[重复] 的相关文章

  • 在java程序中使用c++ Dll

    我正在尝试使用System LoadLibrary 使用我用 C 编写的一个简单的 dll UseDllInJava java import com sun jna Library import com sun jna Native imp
  • Windows 10 Mobile (10.0.14393) 地理围栏后台任务 (LocationTrigger)

    自从10 0 14393 周年纪念更新 LocationTrigger似乎不起作用 我有 Windows Phone 8 1 应用程序 也适用于 UWP 应用程序 输出到的便携式库Windows Runtime Component图书馆 w
  • 通过增加索引之和来生成排序组合的有效方法

    对于启发式算法 我需要一个接一个地评估特定集合的组合 直到达到停止标准 由于它们很多 目前我正在使用以下内存高效迭代器块生成它们 受到 python 的启发 itertools combinations http docs python o
  • (const T v) 在 C 中从来都不是必需的,对吗?

    例如 void func const int i 在这里 const是不必要的 因为所有参数都是按值传递的 包括指针 真的吗 C 中的所有参数确实都是按值传递 这意味着无论您是否包含该参数 实际参数都不会改变const or not 然而
  • C# 正则表达式用于查找 中具有特定结尾的链接

    我需要一个正则表达式模式来查找字符串 带有 HTML 代码 中的链接 以获取文件结尾如 gif 或 png 的链接 示例字符串 a href site com folder picture png target blank picture
  • mprotect 之后 malloc 导致分段错误

    在使用 mprotect 保护内存区域后第一次调用 malloc 时 我遇到分段错误 这是执行内存分配和保护的代码片段 define PAGESIZE 4096 void paalloc int size Allocates and ali
  • 如何使用MySqlCommand和prepare语句进行多行插入?(#C)

    Mysql 给出了如何使用准备语句和 NET 插入行的示例 http dev mysql com doc refman 5 5 en connector net programming prepared html http dev mysq
  • 获取尚未实例化的类的函数句柄

    我对 C 相当陌生 我想做的事情可能看起来很复杂 首先 我想获取一些函数的句柄以便稍后执行它们 我知道我可以通过以下方式实现这一目标 List
  • 从 Code::Blocks 运行程序时出现空白控制台窗口 [重复]

    这个问题在这里已经有答案了 当我尝试在 Code Blocks 中构建并运行新程序时 控制台窗口弹出空白 我必须单击退出按钮才能停止它 它对我尝试过的任何新项目 包括 Hello world 都执行此操作 奇怪的是 它对于我拥有的任何旧项目
  • 2D morton 码编码/解码 64 位

    如何将给定 x y 的莫顿代码 z 顺序 编码 解码为 32 位无符号整数 生成 64 位莫顿代码 反之亦然 我确实有 xy2d 和 d2xy 但仅适用于 16 位宽的坐标 产生 32 位莫顿数 在网上查了很多 但没有找到 请帮忙 如果您可
  • 分配器感知容器和propagate_on_container_swap

    The std allocator traits模板定义了一些常量 例如propagate on container copy move assign让其他容器知道它们是否应该在复制或移动操作期间复制第二个容器的分配器 我们还有propag
  • tabcontrol selectedindex 更改事件未被触发 C#

    嘿伙计们 我有一个很小的问题 请参阅下面的代码 this is main load private void Form1 Load object sender EventArgs e tabAddRemoveOperator Selecte
  • 二叉树中的 BFS

    我正在尝试编写二叉树中广度优先搜索的代码 我已将所有数据存储在队列中 但我不知道如何访问所有节点并消耗它们的所有子节点 这是我的 C 代码 void breadthFirstSearch btree bt queue q if bt NUL
  • ASP.NET JQuery AJAX POST 返回数据,但在 401 响应内

    我的应用程序中有一个网页 需要调用我设置的 Web 服务来返回对象列表 这个调用是这样设置的 document ready function var response ajax type POST contentType applicati
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • 使用 HTMLAgilityPack 从节点的子节点中选择所有

    我有以下代码用于获取 html 页面 将网址设置为绝对 然后将链接设置为 rel nofollow 并在新窗口 选项卡中打开 我的问题是关于将属性添加到 a s string url http www mysite com string s
  • 在 C++17 中使用 成员的链接错误

    我在 Ubuntu 16 04 上使用 gcc 7 2 并且需要使用 C 17 中的新文件系统库 尽管确实有一个名为experimental filesystem的库 但我无法使用它的任何成员 例如 当我尝试编译此文件时 include
  • C语言声明数组没有初始大小

    编写一个程序来操纵温度详细信息 如下所示 输入要计算的天数 主功能 输入摄氏度温度 输入功能 将温度从摄氏度转换为华氏度 独立功能 查找华氏度的平均温度 我怎样才能在没有数组初始大小的情况下制作这个程序 include
  • 受限 AppDomain 中的代码访问安全异常

    Goal 我需要在权限非常有限的 AppDomain 中运行一些代码 它不应该访问任何花哨或不安全的内容 except对于我在其他地方定义的一些辅助方法 我做了什么 我正在创建一个具有所需基本权限的沙箱 AppDomain 并创建一个运行代
  • C#中为线程指定特殊的cpu

    我有 2 个线程 我想告诉其中一个在第一个 cpu 上运行 第二个在第二个 cpu 上运行 例如在具有两个 cpu 的机器中 我怎样才能做到这一点 这是我的代码 UCI UCIMain new UCI Thread UCIThread ne

随机推荐

  • 如何在 Java 代码中访问弹簧执行器健康检查的结果?

    我已经使用端点 actuator health 设置了一个运行状况检查执行器 当您访问 URL 时 它会为我的应用程序生成类似以下内容的内容 status UP app status UP db status UP 有没有办法可以使用 Sp
  • 以常见方式更改seaborn图和matplotlib库图的大小

    from pylab import rcParams rcParams figure figsize 10 10 这适用于直方图 但不适用于因子图 sns factorplot 仍然显示默认大小 sns factorplot Pclass
  • 从终端向 Clojure 应用程序发送消息

    如何向正在运行的 clojure 应用程序发送消息 例如 如果我有一个特定的变量或标志 我想在 uberjar 运行时从终端设置 这可能吗 一种方法是读取应用程序中可以更改的文件 但这听起来很笨拙 提前致谢 实现此目的的一种方法是让您的应用
  • FORTIFY_SOURCE:FD_SET:文件描述符 >= FD_SETSIZE。调用 abort()

    我是一名安卓程序员 今天我运行一个 Android 应用程序 当时我遇到了此类错误 FORTIFY SOURCE FD SET 文件描述符 gt FD SETSIZE 调用 abort 因此 如果有人知道这个问题的答案 请回复我 您的进程打
  • 如何设置 WCF 自托管 REST 服务?

    我正在尝试从我的计算机自行托管一些 WCF RESTful 服务 以供本地网络上的计算机使用 我没有使用 WCF 的经验 而且在这方面基本上是个新手 我创建了一个非常基本的 精简的控制台应用程序 看看是否可以让它工作 static void
  • 保持 Windows Mobile 应用程序在待机模式下运行

    我有一个简单的 Windows Mobile 应用程序 用于记录 GPS 坐标 每 5 分钟一次 问题是只要屏幕正常 应用程序就可以正常工作 打开后 一旦手机进入待机模式 应用程序就会停止工作 当我打开设备时 应用程序再次开始工作 我该怎么
  • 如何按数组内的属性查询嵌套对象?

    我收集了数千个 可能 30 40k 文档 其结构 大大简化 如下 propA 123 obj prop1 a prop1 b prop1 c propB 456 我如何查询以找到所有文档obj prop1 b 我似乎无法弄清楚如何检查数组属
  • 如何获得两个范围的重叠范围

    我在区间 1 15 中有以下范围 我想找到人 1 和人 2 之间的重叠范围 人物 1 1 3 5 10 人物 2 2 4 8 15 这里我应该得到一个范围列表 其中 2 3 8 10 到目前为止我发现的是先按 person1 的范围循环 然
  • Where 子句中的 SQL Row_Number() 函数

    我发现一个问题的答案是Row Number where 子句中的函数 当我尝试一个查询时 我收到以下错误 消息 4108 级别 15 状态 1 第 1 行 窗口函数只能出现在 SELECT 或 ORDER BY 子句中 这是我尝试过的查询
  • Laravel - php artisan view:clear 有什么作用?

    我运行一个命令php artisan view clear 正如我遵循 Laravel 中自定义 404 页面的教程一样 正如所解释的 该命令清除所有编译的视图文件 进一步我在 laravel 文档中查找它 它说它从视图文件中删除缓存 我问
  • 在 kohana v3 中显示“闪现消息”的最佳方式是什么?

    我想知道最好的展示方式闪讯在 Kohana v3 中 一些教程或示例会很有帮助 你的意思是像 Kohana 2 x 的 flash 会话变量吗 最新的 Kohana 支持get once https github com kohana co
  • 无法从程序集“mscorlib”加载类型“System.Security.Principal.WindowsImpersonationContext”

    我正在创建一个 ASP NET API Core 应用程序来处理与 Oracle 数据库通信的 API 服务 在运行时 当进程尝试通过 DbContext 实体框架 使用新的 Oracle 连接连接到数据库时 会出现未处理的错误并强制应用程
  • SQL 数据读取器 - 处理空列值

    我正在使用 SQLdatareader 从数据库构建 POCO 除非在数据库中遇到空值 否则该代码将正常工作 例如 如果数据库中的 FirstName 列包含空值 则会引发异常 employee FirstName sqlreader Ge
  • 部署网站时缺少 using 指令或程序集引用错误

    我有一个网站 其中 cs 文件位于 App Code 文件夹中 在我的项目中添加类项时 VS2010 建议我创建此文件夹 我有一个使用此类的 default aspx cs 文件 我在VS2010上运行没有任何错误 但是 当我通过私人托管公
  • 找到重复元素异或运算符数组中的两个非重复元素?

    假设我有一个包含 2n 2 个元素的数组 数组中的 n 个元素出现了两次 其余两个元素是唯一的 你必须在 O n 时间和 O 1 空间内解决这个问题 解决方案之一是使用 XOR 但我无法理解这一点 任何人都可以帮助我解决这个问题或者可以给我
  • 更改声音文件的速度

    我正在寻找改变声音文件的速度 但不知道如何实现它 我假设在减慢速度的情况下必须进行某种类型的插值 但不确定如何实现加速 也许是几个样本的平均值 无论是改变节奏还是音调 目前并不重要 我想学习如何实现这两者 但至少想先完成其中一个 如果有人对
  • 如何更改32位寄存器的特定位而不更改其他位?

    我想直接使用寄存器的物理地址来操作寄存器的某些位 但是我找不到方法来做到这一点 我看到一些关于设置位掩码的帖子 但我发现它们太令人困惑了 我的寄存器物理地址是 0x4A10005C 我想操纵它的 18 16 位之间的位 我想设置0x3在那些
  • 这个模板语法“typename = T”是什么意思?

    有时我会看到这样的语法 template
  • 如何使用 PAC(代理自动配置)通过 Fiddler 调试 Htmlunit 流量

    我有一个使用 Htmlunit 的应用程序 需要放置 Fiddler 来拦截流量 我读了一些有关通过附带的 PAC 代理自动配置 javascript 文件配置它的内容 但我无法再次找到该文章 如何通过 PAC 配置 Htmlunit PA
  • 为什么声明字符串时不需要分配内存[重复]

    这个问题在这里已经有答案了 我是 C 新手 目前我正在尝试了解指针是如何工作的 这是一个让我困惑的问题 据我所知 在给指针赋值之前 应该为该指针分配一定的内存 如果我错了 请纠正我 如下面的代码 int main void int i in