单行指针操作
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】:
double
和 float
都是浮点类型。因此,如果您的老师说 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*
可能不会产生任何有用的信息,因为float
和double
可能有不兼容的表示(特别是它们通常具有不同的大小)。
【讨论】:
【参考方案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 语言数组与指针操作 ( 数组符号 [] 与 指针 * 符号 的 联系 与 区别 | 数组符号 [] 与 指针 * 符号 使用效果 基本等价 | 数组首地址 与 指针 本质区别 )
从 2D 向量创建 1D 向量的函数(错误:表达式必须具有指向对象的指针类型)
C 语言一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )