指针初始化为什么?

2023-11-23

有件事总是让我困惑,那就是字符指针。 四年后,我再次徘徊在 c 语言上。

以上述案例为例,为什么char指针的行为是这样的?当指针指向任何内容时,我们如何直接寻址指针的内容,或者就像 char 指针存储地址以外的东西一样!

#include <stdio.h>
#include <stdlib.h>

int main()
{ 
char* charPtr="I cant understand why";
int* intPtr=60;


printf("%d\n", intPtr); //displays 60
printf("%p\n", intPtr); // displays the hex value of 60

printf("%s\n", charPtr); // displays the wh0le string
printf("%p\n", charPtr); // displays the start address of the string
return 0;

}

接下来是int指针,它如何接受值 60 以及它存储在哪里?

抛开 char 指针和 malloc 不谈,我认为指针的基本思想是获取一个指向的地址!

为什么这些案例

 *intptr = 60 ; // should be setting the pointee's value to 60
  intptr = 60 ;  // sets the address

抛出编译错误

  int* intPtr=60;

潜入而没有获得受指点者的地址(或者将 60 作为地址,如果是这样,为什么这是不可接受的,不是在前一种情况下)!

我想我在这里遗漏了一些东西,但是嘿!你猜怎么了 ?他们告诉我在SO中搜索!

编辑:将 char 指针指向的地址赋予 int 指针也不会引发错误!

int8_t* intPtr= (int8_t*)0x80485c8 ; // works without casting too ! I guess addresses are acceptable.

取消引用它将给出与第一个相同的值I这是一个好的做法吗?还是有任何其他解释,忽略了字节位大小分配,例如 int 可以容纳 char 等等。?

正如 hmjd 指出的那样,“初始化语法”是问题所在!我编写自己的代码没有问题,但修改别人的代码时就会出现问题!


当指针指向任何内容时,我们如何直接寻址指针的内容,或者就像 char 指针存储地址以外的东西一样!

I think令人困惑的是初始化语法。这:

char* charPtr="I cant understand why";

不取消引用charPtr。它相当于:

char* charPtr;
charPtr = "I cant understand why";

两个代码片段都存储字符串文字的地址"I cant understand why" to the charPtr。不会取消引用指向任何事情发生的指针。任何类型的指针变量都只能存储地址。

This:

int* intPtr=60;

存储一个地址60 in intPtr: no int正在发生分配或引用。不int此时存在变量。编译器应该在这一行发出警告。任何尊重的尝试intPtr很可能会导致崩溃。

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

指针初始化为什么? 的相关文章

  • 尝试了解使用服务打开对话框

    我已经阅读了有关使用 mvvm 模式打开对话框的讨论 我看过几个使用服务的示例 但我不明白所有部分如何组合在一起 我发布这个问题寻求指导 以了解我应该阅读哪些内容 以更好地理解我所缺少的内容 我将在下面发布我所拥有的内容 它确实有效 但从我
  • 使用 CMake 时如何导出 Emscripten 中的 C 函数

    In 本教程 https emscripten org docs porting connecting cpp and javascript Interacting with code html interacting with code
  • 转换 const void*

    我有一个函数返回一个const void 我想用它的信息作为char 我可以将它投射为 C 风格的罚款 char variable但是当我尝试使用reinterpret cast like reinterpret cast
  • MVC3中设置下拉列表中的所选项目

    我必须为视图中的下拉列表设置所选项目 但它不起作用 View div class editor label Html LabelFor model gt model Gender div div class editor field Htm
  • 传递 constexpr 对象

    我决定给予新的C 14的定义constexpr旋转并充分利用它 我决定编写一个小的编译时字符串解析器 然而 我正在努力保持我的对象constexpr将其传递给函数时 考虑以下代码 include
  • 如何将 .txt 文件中的数据转换为 xml? C#

    我在一个文本文件中有数千行数据 我想通过将其转换为更容易搜索的内容来轻松搜索 我希望 XML 或其他类型的大型数据结构 尽管我不确定它是否是最好的对于我的想法 每行的数据如下所示 第 31 册 托马斯 乔治 32 34 154 每本书都不是
  • 不同 C++ 文件中的相同类名

    如果两个 C 文件具有相同名称的类的不同定义 那么当它们被编译和链接时 即使没有警告也会抛出一些东西 例如 a cc class Student public std string foo return A void foo a Stude
  • 获取没有显式特征的整数模板参数的有符号/无符号变体

    我希望定义一个模板类 其模板参数始终是整数类型 该类将包含两个成员 其中之一是类型T 另一个作为类型的无符号变体T 即如果T int then T Unsigned unsigned int 我的第一直觉是这样做 template
  • 在 C# 中检查 PowerShell 执行策略的最佳方法是什么?

    当你跑步时Get ExecutionPolicy在 PowerShell 中 它得到有效的执行政策 https learn microsoft com en us powershell module microsoft powershell
  • 是否使用 C# 数据集? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对 C 中的数据集概念有点困惑 编码 ASP NET 站点 但这并不重要 在我的阅读中 我了解到它们 本质上 用作我的应用程序和我的
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • 将 Word 转换为 PDF - 禁用“保存”对话框

    我有一个用 C 编写的 Word 到 PDF 转换器 除了一件事之外 它工作得很好 有时 在某些 Word 文件上 后台会出现一条消息保存源文件中的更改 gt 是 否 取消 但我没有对源文件进行任何更改 我只想从 Word 文件创建 PDF
  • 将函数参数类型提取为参数包

    这是一个后续问题 解包 元组以调用匹配的函数指针 https stackoverflow com questions 7858817 unpacking a tuple to call a matching function pointer
  • 如何在 C# 中创建异步方法?

    我读过的每一篇博客文章都会告诉您如何在 C 中使用异步方法 但由于某些奇怪的原因 从未解释如何构建您自己的异步方法来使用 所以我现在有这段代码使用我的方法 private async void button1 Click object se
  • 模板类的模板构造函数的 C++ 显式模板特化

    我有一个像这样的课程 template
  • Visual Studio 2015:v120 与 v140?

    仅供参考 Win10 x64 我今天开始尝试 Visual Studio 2015 在弄清楚如何运行 C C 部分后 我尝试加载一个大型个人项目 该项目使用非官方的glsdk http glsdk sourceforge net docs
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa
  • C++:为什么 numeric_limits 对它不知道的类型起作用?

    我创建了自己的类型 没有任何比较器 也没有专门化std numeric limits 尽管如此 由于某种原因 std numeric limits
  • EntityFramework 6.0.0.0 读取数据,但不插入

    我创建了一个基于服务的数据库 folderName gt Add New Item gt Data gt Service based Database文件到 WPF 应用程序中 然后我用过Database First方法并创建了Person
  • 是否允许全局静态标识符以单个 _ 开头?

    换句话说 可能static 文件范围 全局变量恰好以一个下划线开头 而不会产生与 C 实现发生名称冲突的可能性 https www gnu org software libc manual html node Reserved Names

随机推荐

  • Android - 如何获取 Spinner 中的所有项目?

    如何获得 Spinner 中的所有物品 我在尝试寻找一种方法来获取所有项目时遇到了麻烦Spinner但我无法找到一个优雅的解决方案 唯一的解决方案似乎是在将其添加到之前存储项目列表Spinner 还有其他更好的方法吗 一个简单而优雅的方法是
  • Android、Ormlite、数据库位置

    我正在使用 Ormlite 保存 Android 应用程序 在 Motorola Xoom 上运行 中的一些数据 默认情况下 sql数据库保存到 data data 包名 databases dbname db 问题是 Xoom 没有 ro
  • 为什么 noreturn/__builtin_unreachable 会阻止尾调用优化

    我发现 如果被调用函数不返回 即标记为 Noreturn noreturn 或者有一个 builtin unreachable 通话后 这是有意为之的行为 而不是错过的优化 如果是的话 为什么 示例1 ifndef cplusplus de
  • 使用 JAXB 从 JSON 解组嵌套对象

    我正在尝试使用 Eclipselink 将输入 JSON 解组到 JAXB 对象中 然而 当我尝试这样做时 我发现嵌套对象最终被设置为空 我可以尝试自行解组嵌套对象 并且它将一直工作 直到它必须解组进一步的嵌套对象 然后该对象也设置为 nu
  • 当 UDP 标头校验和不正确时,UDP 数据包是否会被丢弃?

    如果我打开一个原始套接字 并发送带有错误校验和的 udp 数据包 这些数据包是否会被 tcp ip 堆栈丢弃到另一侧 是的 它们会被丢弃 如果您需要更可靠的通信 那么使用 TCP 会更好 欲了解更多信息 请看一下 http www diff
  • handler.postDelayed 在 IntentService 的 onHandleIntent 方法中不起作用

    final Handler handler new Handler LOG d delay handler postDelayed new Runnable Override public void run LOG d notify cal
  • 何时为不再拥有的资源回收存储?

    下面程序的第 2 行分配了一个向量资源 当程序结束时 向量资源不被拥有 如果资源根本不被拥有 那么什么时候会回收它 是否有使用 Rust 所有权语义和生命周期术语的解释可以让程序员相信该资源确实被回收了 fn main let mut v
  • psql中,为什么有些命令没有效果?

    有时我的命令在psql似乎没有效果 知道为什么吗 以下是数据库中所有表的列表library development library development gt d List of relations Schema Name Type Ow
  • 从 jar 文件复制目录

    我最近开发了一个应用程序并创建了 jar 文件 我的一个类创建一个输出目录 用其资源中的文件填充它 我的代码是这样的 Copy files from dir template in this class resource to output
  • 避免 Seaborn 条形图颜色去饱和

    我正在尝试使用几个不同的库 bokeh seaborn and matlotlib 但保持相同的配色方案 我从散景中选择了分类调色板 from bokeh palettes import Category10 as palette然后也用在
  • 什么是 Rails 插件或 Ruby gem,可以自动修复英语语法?

    Facebook 刚刚重新推出了 Comments 具有自动语法修复功能 语法过滤器有什么作用 添加标点符号 例如句子末尾的句号 修剪多余的空格 自动区分单词 例如 将 a 的第一个单词大写 句子 扩展俚语 例如 plz 变为 please
  • 如何实现带锁选择的select2?

    我正在尝试将 select2 与一个禁用值一起使用 我正在尝试像这样实现它 select currency select2 data preloaded data 我一直在读关于锁定选择但我无法实现它 请问有人可以让我知道如何实现它或者有关
  • 元标记中的 html 实体会影响索引吗?

    我想知道在元标记 如关键字和描述 中使用 HTML 实体是否是最好的方法 它会影响搜索引擎的索引吗 只要我的字符集允许字符 我就会放置没有实体的元标记内容 我研究了一下 发现了这个Google 网站管理员 网站所有者帮助该示例包含 9 24
  • 在 Hangfire 中保留执行超过 1 天的作业的历史记录

    我刚刚开始使用 Hangfire 我很喜欢它 据我了解 Hangfire 会将成功作业的历史记录保留 1 天 然后将其清除 有没有办法可以自定义此默认行为并将历史记录保留任意持续时间 例如 7 天 为此 您需要创建一个作业过滤器并通过han
  • postgres 无法识别函数中的临时表

    这可能是因为我累了 或者我是 postgres 新手 然而 我试图在函数中使用临时表 而 postgres 抱怨 关系不存在 然而 如果我获取函数的主体并执行它 它就可以正常工作 下面是我尝试创建的函数类型的示例 请记住 我已经删除了所有有
  • 我正在使用 Python urllib2 下载文件。如何查看文件大小有多大?

    如果它很大 那么停止下载 我不想下载大于 12MB 的文件 request urllib2 Request ep url request add header User Agent random choice agents thefile
  • R中按行号分割数据帧

    这可能非常简单 但我找不到解决方案 df lt data frame replicate 10 sample 0 1 10 rep TRUE v lt c 3 7 有没有一种优雅的方法可以在 v 中指定的行号处将此数据帧拆分为 列表的 三个
  • 将大小为编译时常量的数组初始化为单个值

    我有一个 c 风格的数组 其大小由 a 定义 define并且可以根据编译选项进行更改 例如 if LINUX define SIZE 4 else define SIZE 5 endif static int myArr SIZE 如何将
  • Reader和InputStream有什么区别?

    Reader和InputStream有什么区别 以及何时使用什么 如果我可以使用 Reader 来读取字符 为什么我会使用 inputstream 我想读取对象 InputStream 是从资源获取信息的原始方法 它逐字节抓取数据 而不执行
  • 指针初始化为什么?

    有件事总是让我困惑 那就是字符指针 四年后 我再次徘徊在 c 语言上 以上述案例为例 为什么char指针的行为是这样的 当指针指向任何内容时 我们如何直接寻址指针的内容 或者就像 char 指针存储地址以外的东西一样 include