单行指针操作

时间:2011-02-10 22:53:16

标签: c++ pointers floating-point type-conversion

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

问题如下:

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

类型的数组
  1. 将ptr声明为指向double
  2. 类型的对象的指针
  3. 将变量num1的地址分配给ptr。
  4. 显示ptr指向的对象的值。
  5. 将ptr指向的对象的值赋给变量num1。
  6. 显示num1的地址。
  7. 将存储在ar1中的字符串复制到ar2。
  8. 我的问题是2号。问题是指针是双精度但变量num1是浮点数。

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

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

    1. double * ptr = new double;
    2. ptr =(double *)& num1;
    3. cout<< * PTR;
    4. num1 = * ptr;
    5. cout<< &安培; NUM1;
    6. //不知道
    7. 这给了我奇怪的值,如果完成但如果我将num1声明为double并将2更改为ptr =& num1一切正常。

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

6 个答案:

答案 0 :(得分:2)

doublefloat都是浮点类型。因此,如果你的老师说num1是一个“浮点类型”,那么你应该可以使用double来逃避。如果您的老师说要使用float,那么您就会被卡住。

6要求你做一些非常具体的事情。它将涉及一些谷歌搜索,但它可以作为1班轮。

答案 1 :(得分:2)

对于这个问题:

  

将变量float num1的地址指定给double* ptr

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

您还应该知道,如果您使用C++作为标记,则您应该更喜欢使用C++ - 样式广告(reinterpret_cast<type>(variable)等)来使用C-风格演员。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

所以只需将num1声明为double。

答案 4 :(得分:0)

一切似乎都是正确的。除了数字1.我只会说double * ptr;它没有说要实现它,你正在创建一个内存泄漏。

6是strcpy_s(arr2,arr1);

答案 5 :(得分:-1)

对于6:

string.h:strcpy()strncpy()strlcpy() - google他们。