char **p,char *p[],char p[][] 之间的区别

2023-12-23

char *p = "some string"   

创建一个指针 p 指向包含该字符串的块。

char p[] = "some string" 

创建一个字符数组并在其中包含文字。

第一个是常量声明,和二维数组一样吗?

有什么区别

char **p,char *p[],char p[][]. 

我读到了一些关于 char **p 创建一个指针数组的内容,因此与char p[][]用于存储指针值。

前两个声明创建常量数组。当我尝试修改内容时,没有收到任何运行时错误argv in main(int argc,char **argv)。是因为它们是在函数原型中声明的吗?


普通声明(不是函数参数)

char **p;声明一个指向指针的指针char。它为指针保留空间。它不为指向的指针或任何char.

char *p[N];声明一个数组N指向char。它预留空间N指针。它不为任何内容保留任何空间char. N必须显式提供,或者在带有初始值设定项的定义中,通过让编译器计算初始值设定项来隐式提供。

char p[M][N];声明一个数组M的数组N char。它预留空间MNchar。不涉及任何指针。N必须明确提供。M必须显式提供,或者在带有初始值设定项的定义中,通过让编译器计算初始值设定项来隐式提供。

函数参数中的声明

char **p声明一个指向指针的指针char。调用函数时,会为该指针提供空间(通常在堆栈上或处理器寄存器中)。没有为指向指针或任何指针保留空间char.

char *p[N]调整为char **p,所以和上面的一样。的价值N被忽略,并且N可能缺席。 (某些编译器可能会评估N,所以,如果它是一个有副作用的表达式,比如printf("Hello, world.\n"),这些影响可能在调用函数时发生。 C 标准对此并不清楚。)

char p[M][N]调整为char (*p)[N],所以它是一个指向数组的指针N char。的价值M被忽略,并且M可能缺席。N必须提供。调用函数时,会为指针提供空间(通常在堆栈上或处理器寄存器中)。没有为数组保留空间N char.

argv

argv是由调用的特殊软件创建的main。它充满了软件从“环境”获得的数据。您可以修改char里面的数据。

在你的定义中char *p = "some string";,您无权修改以下数据p指向,因为 C 标准规定字符串中的字符不能被修改。 (从技术上讲,它所说的是,如果你尝试的话,它并没有定义行为。)在这个定义中,p不是数组;它是指向第一个的指针char在一个数组中,以及那些char位于字符串文字内部,并且不允许您修改字符串文字的内容。

在你的定义中char p[] = "some string";,您可以修改内容p。它们不是字符串文字。在这种情况下,字符串文字在运行时实际上并不存在;它只是用来指定数组如何p已初始化。一次p已初始化,可以修改。

数据设置为argv以允许您修改它的方式设置(因为 C 标准指定了这一点)。

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

char **p,char *p[],char p[][] 之间的区别 的相关文章

  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • 棘手的指针问题

    我在过去的关于 c 中指针的考试问题上遇到了麻烦 这是我从这个链接找到的 http www cl cam ac uk teaching exams pastpapers y2007p3q4 pdf http www cl cam ac uk
  • Task.ContinueWith() 父任务不等待子任务完成[重复]

    这个问题在这里已经有答案了 自从我了解Task在嵌套任务的上下文中 我真的不明白 为什么在第二次打印之前进行第三次打印 尽管我已经用过Task WaitAll t 它打印3rd之前一行2nd line Code public static
  • 修改 LESS 变量的 alpha 不透明度

    使用 LESS 我知道我可以更改颜色变量的饱和度或色调 看起来像这样 background lighten blue 20 不过 我想改变颜色的 alpha 不透明度 最好是这样的 background alpha blue 20 有没有一
  • SQL:如何将视图与表连接?

    UPDATED 我正在使用 MySQL 语句创建视图 如果编辑寄出的图书超过 50 本书 我需要显示他们的名字 姓氏和城市 我的三张表是 create table editors ed id char 11 ed lname varchar
  • 禁用 VS Code 中的特定编译器警告

    我想知道如何抑制 VS Code 中的特定编译器警告对于整个项目 我见过这个问题 是否可以禁用特定的编译器警告 https stackoverflow com questions 22536518 is it possible to dis
  • 如何使用 CultureInfo 格式化已弃用的货币?

    在 dotnet 中 以特定于文化的方式格式化货币的推荐方法是 据我所知 using System Globalization var info CultureInfo GetCultureInfo en GB return string
  • 节点组的位置在 SCNNode.runAction 开始时重置

    我有一些代码 当点击屏幕时 它会围绕 x 轴旋转多个 SCNNode 如下所示 func handleTap gestureRecognize UIGestureRecognizer let sceneView self view as S
  • 光栅图像似乎使用 R 的传单进行了移动

    我想使用 R 中的 leaflet 包绘制一些空间数据 但是生成的光栅图像与参考网格相比似乎发生了偏移 我怀疑地图投影问题 但我不是该主题的专家 因此任何帮助将不胜感激 这是绘制地图的最小代码 library leaflet library
  • 如何删除临时消息

    我正在尝试找出一种机制 将临时消息发布给用户 然后将其删除并替换为所有人都可见的消息 与 giphy 类似的行为 其中 Slash 命令显示交互式临时消息 并在用户决定发送哪个 gif 后创建频道消息 我也对更新临时消息感到好奇 我认为如果
  • Bootstrap 5 带有 html 内容的弹出窗口

    我试图将 bootstrap5 弹出窗口内容与 HTML 属性分开 就像对其他组件所做的那样 但我无法让它工作 var popoverTriggerList slice call document querySelectorAll data
  • Java 将 XML 文档渲染为 PDF

    我有一个 XML 文档 当前存储为内存字符串 并且希望将其呈现为 PDF 换句话说 PDF 内容将是 XML 文档 该方法呈现的 XML 是通用的 可能会发送多种类型的 XML 文档 我在弄清楚如何使用各种基于 Java 的框架来完成任务时
  • iPhone 5s 扬声器模式下的 iOS 7 机器人/乱码

    我们有一个 VOIP 应用程序 可以录制和播放音频 因此 我们使用 PlayAndRecord kAudioSessionCategory PlayAndRecord 音频会话类别 到目前为止 我们已成功地将其用于运行 iOS 6 和 iO
  • IE8 和 VS2008:如何禁用脚本调试?

    IE8 已经出来了 显然 每当您在调试模式下启动项目时 它都会自动打开脚本 JavaScript 调试 有谁知道如何关闭此功能 我搜索了 IE8 VS2008 设置 但没有看到任何内容 Edit 您不能只进入 Internet 选项并禁用调
  • 使用 System.Runtime.Caching,但是当我去检索它时,它是空的?

    我有一个 C WPF 应用程序 我正在尝试使用新的 System Runtime Caching 来实现缓存 当我向缓存中添加某些内容时 我会检查它并确认它确实存在 但是 当我重新启动应用程序时 它就从缓存中消失了 因此 在下面的示例中 输
  • 使用 ASIHTTPRequest 从 iOS 上传图像

    我的应用程序在注册时上传图像和用户 电子邮件 通行证 iOS 到 php 到 mySQL 电子邮件 用户 密码和图像名称都可以很好地保存到数据库中 它只是未上传到服务器上的文件夹的图像 所以这只是我的代码的一部分失败了 但是有人能看到哪里吗
  • HTTP 补丁 XmlHttpRequest 支持

    我正在开发一些待办事项应用程序 并希望使用 HTTP 方法 PATCH 来添加和删除待办事项 因为这在语义上比 PUT 更好 在后端我使用express js node js 在前端backbone js 使用jQuery进行ajax 我已
  • 当书签拖到工具栏时如何设置网站图标/图标?

    我为自己制作了一个小书签 它的功能很好 但当添加到 Opera 或 Firefox 的工具栏时 它只是呈现浏览器的默认书签图标 分别为地球仪和星星 我的网站有一个网站图标 窗口 选项卡甚至 网站 书签都使用我指定的网站图标 只是不是我的书签
  • 将 git repo 中的所有文件转换为 LF 行结尾的最简单方法是什么

    所以我有一个旧的仓库 有很多文件 有些是 CRLF 有些是 LF 我想要 1 将所有文件更改为 LF 我使用 dos2unix 来转换我的文件 但 git commit 忽略这些更改 我还将 git config global core a
  • 重新加载发布到 Github 页面的 Vue 网站时出现 404

    我已经部署了我的内容 distmaster 分支中的文件夹christopherkade github io 它已经部署了我的website https christopherkade com 成功了 但是当我使用导航栏导航时 christ
  • char **p,char *p[],char p[][] 之间的区别

    char p some string 创建一个指针 p 指向包含该字符串的块 char p some string 创建一个字符数组并在其中包含文字 第一个是常量声明 和二维数组一样吗 有什么区别 char p char p char p