我正在学习C++,我找到了一些我无法理解的东西:
可以显式刷新输出缓冲区以强制写入缓冲区.默认情况下,读取
cin刷新cout;cout程序正常结束时也会刷新.
因此刷新缓冲区(例如输出缓冲区):这是通过删除缓冲区中的所有内容来清除缓冲区还是通过输出缓冲区中的所有内容来清除缓冲区?或者冲洗缓冲区意味着完全不同的东西?
我听说过流,更具体地说是文件流.
那他们是什么?
它是在记忆中有位置的东西吗?
它是包含数据的东西吗?
它只是文件和对象之间的连接吗?
任何帮助,将不胜感激
在使用特定字符串操作功能时,strcpy我做了这个小程序.
char s1[8]="Hellopo";
char s2[4]="sup";
strcpy(s1,s2);
cout<<s1<<endl;
Run Code Online (Sandbox Code Playgroud)
当我打印出s1它实际上只打印出"sup".我期待它打印"suplopo".
然后我这样做了:
cout<<s1+4 << endl;
它打印出"opo";
而这个的输出:cout<<s1+3<<endl; 什么都没有
在思考了一下之后.
我得出了这个结论.由于C++在到达空终止符后停止输出字符串.因此必须在strcpy函数中复制null .导致此字符串:
s - u - p - \0 - o - p - o - \0;
请告诉我这是否正确.如果我不是请纠正我.
如果您有任何更多信息要提供,请做.
所以我在学习课程,偶然发现我发现的东西对我来说很尴尬.
class Nebla
{
public:
int test()
{
printout();
return x;
}
void printout()
{
printout2();
}
private:
int x,y;
void printout2()
{
cout<<"Testing my class";
}
};
Run Code Online (Sandbox Code Playgroud)
我发现在一个类中我可以在声明它们之前使用函数(原型)
你可以看到我用
printout(),printout2()decleration之前.
我也可以在声明变量之前使用变量
你可以看到我做到了
return x; 在声明x之前.
为什么我可以在声明之前在类中使用函数和变量但在类之外如果我这样做,我会收到错误?
谢谢
我正在阅读Pointer Arithmetic中的一些内容,我遇到了两件我无法理解的事情,也不知道它的用途
address_expression - address_expression
Run Code Online (Sandbox Code Playgroud)
并且
address_expression > address_expression
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释一下,它们是如何工作的以及何时使用它们.
编辑:
我想说的是,如果我只取两个地址并减去它们,它们会产生什么
如果我拿两个地址并比较它们的结果或基于的比较
编辑:我现在明白了减去地址的结果,但比较地址我仍然没有得到它.
我理解1 <2,但是地址如何比另一个更大,他们在比较什么
检查这个程序
ifstream filein("Hey.txt");
filein.getline(line,99);
cout<<line<<endl;
filein.getline(line,99);
cout<<line<<endl;
filein.close();
Run Code Online (Sandbox Code Playgroud)
Hey.txt文件中有很多字符.超过1000
但我的问题是为什么我第二次尝试打印线.它不打印?
现在我一直在学习内联函数,我遇到了让我困惑的东西
看到这堂课
class Nebla{
private:
int x;
public:
inline void set(int y){x=y;}
inline void print(){cout<<x<<endl;}
};
Run Code Online (Sandbox Code Playgroud)
它有一个私有数据成员: int x;
它有两个公共内联函数:set(int y) 和print()
现在因为它们是两个函数是内联的,所以当它们被调用时,编译器会用函数的内容替换函数调用.
所以,如果我这样做
Nebla n;
n.set(1);
n.print();
Run Code Online (Sandbox Code Playgroud)
由于这两个函数是内联的,它应该相当于:
Nebla n;
n.x=1;
cout<<n.x<<endl;
Run Code Online (Sandbox Code Playgroud)
但等一下,x是私人的.因此,这不应该奏效.
但它确实如此,我很困惑,为什么它确实有效,虽然通常你不能从课外访问私人成员?
任何人都可以解释为什么你可以从类外部访问私有数据成员但是当成员函数是内联时它可以内联它只是用函数的内容替换函数调用吗?
我有一个关于增加指针的问题,我不太明白.
让我们看看2个小程序:
int iTuna=1;
int* pPointer= &iTuna;
*pPointer = *pPointer + 1 ; //Increment what pPointer is pointing to.
cout << iTuna << endl;
Run Code Online (Sandbox Code Playgroud)
在第一个程序中,我将pPointer指向的内容增加为"*pPointer =*pPointer +1".正如我所料,iTuna改为"2"并且程序打印出值"2"
int iTuna=1;
int* pPointer= &iTuna;
*pPointer++; //Increment what pPointer is pointing to.
cout << iTuna << endl;
system("PAUSE");
return 0;
Run Code Online (Sandbox Code Playgroud)
在这里,我增加了pPointer指向的增量,这是"*pPointer ++".但是这里iTuna保持为"1"并且程序打印出值"1".虽然我期望这个作为第一个工作,但事实并非如此.
请帮助我,告诉我为什么第二代代码没有像我预期的那样工作以及如何绕过它.
谢谢
现在让我们看看这个小程序
char s[20]="One";
strcat(s,"Two");
cout<<s<<endl;
Run Code Online (Sandbox Code Playgroud)
这里首先s的值为"One",对于直观表示,这是s的值:
O - n - e - \0
然后我在字符串的末尾添加"Two",产生这个:
O - n - e - T - w - o - \0
现在你可以看到字符串中唯一的空值是在"One"之后,现在是在"OneTwo"之后
我的问题是:null是否被字符串"Two"覆盖,然后它在结尾处添加了它自己的null.
或者在开始时已经存在的空值又回到了最后?
(这个问题似乎没有什么区别,但我想知道我学到的一切)
谢谢
我开始学习字符串和字符串函数(来自一本书),我学习了像strcpyand strcat和strncat..etc 这样的函数
所以我开始在简单的程序中练习使用它们来了解它们的作用.
后来我很惊讶,在书中它告诉我必须使用#include <cstring>才能使用所有这些字符串函数.
我已经尝试过多次使用字符串函数而不包括<cstring>为什么?
我包含的唯一头文件是<iostream>,但我能够使用字符串函数.
请有人向我解释为什么字符串函数没有工作<cstring>,我是否需要将它包含在使用字符串函数中,如果没有使用它的话<cstring>;