单行指针操作

Posted

技术标签:

【中文标题】单行指针操作【英文标题】:Single line pointer operations 【发布时间】:2011-02-10 22:53:15 【问题描述】:

我一直在努力解决 C++ 中的家庭作业问题。

问题如下:

编写一个语句来执行以下每一项任务。假设 num1 是一个浮点变量。还假设 ar1[100] 和 ar2[100] 是 char 类型的数组:

    将 ptr 声明为指向 double 类型对象的指针 将变量 num1 的地址分配给 ptr。 显示ptr指向的对象的值。 将ptr指向的对象的值赋给变量num1。 显示 num1 的地址。 将ar1中存储的字符串复制到ar2中。

我的问题是数字 2。问题是指针是双精度但变量 num1 是浮点数。

我的另一个问题是,如果不使用 for 循环,我看不到 6 是如何完成的。

到目前为止,我已经得到了这个:

    双 *ptr = 新双; ptr = (double *) &num1; cout num1 = *ptr ; cout //不知道

如果完成,这会给我奇怪的值,但是如果我将 num1 声明为双精度并将 2 更改为 ptr = &num1 一切正常。

请帮我解决这个问题两天了。

【问题讨论】:

关于(6),浏览一些库函数。 始终将家庭作业标记为homework。请格式化您的代码,使用 按钮或在源代码前加上 4 个空格并相应缩进。 注意,对于(1),只需要声明ptr;您不需要使用值初始化它(这只会在执行 (2) 时导致泄漏)。至于在 SO 上提出家庭作业问题的指南,请阅读"How to ask and answer homework questions?"。你在最初的文章中做得很好,并达到了主要指导方针:问题被标记为家庭作业,你展示了你所做的事情并就问题的相当具体方面寻求帮助。 re: #6 看看cplusplus.com/reference/clibrary/cstring re: #6 看看cplusplus.com/reference/string/string/operator= 【参考方案1】:

doublefloat 都是浮点类型。因此,如果您的老师说 num1 是“浮点类型”,那么您应该可以使用双精度数。如果你的老师说要使用float,那你就卡住了。

6 要求您做一些非常具体的事情。这将涉及一些谷歌搜索,但它可以作为 1-liner 来完成。

【讨论】:

【参考方案2】:

针对问题:

将变量float num1的地址赋值给double* ptr

您确定应该分配地址而不是值吗?将变量的地址分配给完全不同类型的指针是没有意义的。

您还应该知道,如果您按照标签所述使用C++,您应该更喜欢使用C++ 样式转换(reinterpret_cast<type>(variable) 等)而不是使用 C 样式转换。

【讨论】:

【参考方案3】:

double 一个浮点值,所以ptr = &num1 应该没问题。另一方面,double *ptr = new double; 不仅声明一个指向double 的指针,而且还初始化它。 double* ptr 声明就足够了;

float* 转换为double* 可能不会产生任何有用的信息,因为floatdouble 可能有不兼容的表示(特别是它们通常具有不同的大小)。

【讨论】:

【参考方案4】:

请看,double 是双精度 (binary64) 浮点 IEEE 754,而 float 是相同标准定义的单精度 (binary32) 浮点。

所以只需将 num1 声明为 double。

【讨论】:

【参考方案5】:

一切似乎都是正确的。除了数字 1。我只想说 double *ptr;它并没有说要实例化它,您正在创建内存泄漏。

6 是 strcpy_s(arr2, arr1);

【讨论】:

要求没有说明字符串的类型。在 C++ 中,首选是:std::string ar2 = ar1;. 不,他们没有。还假设 ar1[100] 和 ar2[100] 是 char 类型的数组【参考方案6】:

6 人:

string.h:strcpy()strncpy()strlcpy() - 谷歌搜索。

【讨论】:

因为它被标记为 C++,所以首选 #6:std::string ar2 = ar1;。要求没有说明字符串的种类。 @ThomasMatthews:要求说 ar1[100] 和 ar2[100] 是“char 类型的数组”,因此 ar1 和 ar2 不能是 std::string 类型。

以上是关于单行指针操作的主要内容,如果未能解决你的问题,请参考以下文章

C++原生指针,引用与智能指针

C 语言数组与指针操作 ( 数组符号 [] 与 指针 * 符号 的 联系 与 区别 | 数组符号 [] 与 指针 * 符号 使用效果 基本等价 | 数组首地址 与 指针 本质区别 )

野指针与内存操作

从 2D 向量创建 1D 向量的函数(错误:表达式必须具有指向对象的指针类型)

C 语言一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )

C 语言指针数据类型 ( 指针类型变量 | 使用 * 操作内存 )