这个问题试图收集每年出版的数十本不良C++书籍中的少数珍珠.
与许多其他编程语言不同,这些编程语言经常从互联网上的教程中随处获取,很少有人能够快速学习C++,而无需学习编写精良的C++书籍.这样做太复杂了.事实上,它是如此庞大和复杂,有很多非常糟糕的C++书籍.我们并不是在谈论糟糕的风格,而是体育明显的事实错误和促进糟糕的编程风格.
请编辑接受的答案,以提供高质量的书籍和近似的技能水平 - 最好 在 C++聊天室讨论您的添加后.(如果他们不同意建议,常客可能会毫不留情地撤销你的工作.)添加一篇关于你亲自阅读/受益的每本书的简短描述/描述.随意讨论质量,标题等.符合标准的书籍将被添加到列表中.由C和C++用户协会(ACCU)撰写评论的图书都有指向评论的链接.
*注意:常见问题和其他资源可以在C++标签信息和c ++ - faq中找到.
我一直在研究一个接受数组和数组大小作为参数的函数。函数任务是创建第二个数组,其大小是第一个数组的两倍,将第一个数组的元素复制到第二个数组的前半部分,并将其余元素初始化为零。
如果我在函数中动态分配第二个数组,我只能让它工作。我怀疑这是因为一旦函数将控制权返回给调用函数,任何未动态分配的数组都会从内存中删除。换句话说,调用函数中的指针将指向垃圾数据,因为在扩展器函数中创建的第二个数组现在已经消失了。任何人都可以证实这一点吗?
这是以两种不同方式编写的函数。
这种方式有效
int *array_expander(int array[], int size)
{
int *new_array = new int[size*2];
for(int i{0}; i < size; i++)
*(new_array + i) = *(array + i);
for(int i{size}; i < size * 2; i++)
*(new_array + i) = 0;
return new_array;
}
Run Code Online (Sandbox Code Playgroud)
这种方式不
int *array_expander(int array[], int size)
{
int new_array[size * 2];
for(int i{0}; i < size; i++)
*(new_array + i) = *(array + i);
for(int i{size}; i < size * 2; i++)
*(new_array + i) = …Run Code Online (Sandbox Code Playgroud) 这是我正在尝试做的一个例子:
#include <stdio.h>
FILE* f;
const char* getstring()
{
f = fopen ("hello.txt", "r");
char x[200];
for (int i = 0; i < 200; i++) x[i] = 0;
for (int c = getc(f), i = 0; (c != EOF) && (i < 200); c = getc(f), i++)
x[i] = c;
fclose(f);
printf ("getstring(): x = %s", x);
const char* y = x;
printf ("getstring(): y = %s", y);
return y;
}
void printstring (const char* string)
{
printf ("%s", string); …Run Code Online (Sandbox Code Playgroud) 我究竟做错了什么?
在第一个打印中,这些值很模糊,在第二个打印中,它们都是零。
第一次打印-q:0.965926 0.000000 0.258819 0.000000
第二次打印-q:0.000000 0.000000 0.000000 0.000000
float *AnglesToQaternion(float roll, float pitch, float yaw) { // Convert Euler angles in degrees to quaternions
static float q[4];
roll = roll * DEG_TO_RAD;
pitch = pitch * DEG_TO_RAD;
yaw = yaw * DEG_TO_RAD;
float t0 = cosf(yaw * 0.5);
float t1 = sinf(yaw * 0.5);
float t2 = cosf(roll * 0.5);
float t3 = sinf(roll * 0.5);
float t4 = cosf(pitch * 0.5);
float t5 = sinf(pitch * 0.5); …Run Code Online (Sandbox Code Playgroud)