Thinking in c++上面几道题目求助是第三章的。3-8 : 编写一个使用所用三个图形字符(trigraph)的程序,看看你
Thinking in c++上面几道题目求助
是第三章的。
3-8 : 编写一个使用所用三个图形字符(trigraph)的程序,看看你的编译器是否支持它们。
我的问题:不明白所有三个图形字符是什么意思。
3-26 :定义一个int数组。获得该数组的起始地址,使用static_cast把它转化为void*。写一个带以下参数的函数:一个void *, 一个数字,(表明字节的数目),和一个值(表明每个字节需要设定的值)。使用建立的数组测试这个函数。
我的错误代码:
- C/C++ code
#include <iostream>using namespace std;void fun(void *ptr, int m, int n){ /* 这个函数应该怎么写呢? */ }int main(){ int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; void *ptr = static_cast<void *>(a);}3-27 : 建立一个const double类型数组和一个volatile double类型数组。通过引用每个数组的下标且用const_cast把每个元素分别转化为non-const和non-volatile,然后对每个元素赋值。
我的错误代码:
- C/C++ code
#include <iostream>using namespace std;void fun(void *, int, int);int main(){ const double a1[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; /* 使用volatile关键字的变量表示不知道什么时候会改变,编译器将每次都从内存中去取变量。*/ volatile double a2[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; for (int i=0; i<10; i++) { /* 编译报错说数组元素的地址不能直接作为表达式的左值,那么有什么办法实现转变呢? */ &a1[i] = const_cast<double *>(&a1[i]); &a2[i] = const_cast<double *>(&a1[i]); }}[解决办法]
3-26应该是继续用static_cast把ptr转换成byte *指针,然后用一个循环来赋值,当然,返回值还要再转换回void *
