1.win32位系统,vc编译器中,char占1字节、short占 2 字节、int ,float,long都占4字节、double 占8 字节.
--------------------------------------------------------------------------------------------------------
1.Break的作用:1.用于switch语句中,从中途退出switch语句。 2.用于循环语句中,从循环体内直接退出当前循环。重点看1.
case后面的常量表达式实际上只起语句标号作用,而不起条件判断作用,即“只是开始执行处的入口标号”。
因此,一旦与switch后面圆括号中表达式的值匹配,就从此标号处开始执行;
而且执行完一个case后面的语句后,若没遇到break语句,就自动进入下一个case继续执行,而不再判断是否与之匹配,直到遇到break语句才停止执行,退出switch语句。
因此,若想执行一个case分之后立即跳出switch语句,就必须在此分支的最后添加一个break语句。
2. 从上面的描述可以看出,switch条件选择语句中的break的作用跟循环控制语句中的作用基本相同:
都是不执行break之后的语句,并结束退出switch语句;
3. 与循环控制中存在continue语句不同的是,switch条件选择语句中没有continue语句;
把case中的break注释掉。
#include<iostream>
using namespace std;
void main()
{
int choice;
cout<<"Please make an option:";
cin>>choice;
switch(choice)
{
case 1:
cout<<"one"<<endl;
//break;
case 2:
cout<<"two"<<endl;
//break;
case 3:
cout<<"three"<<endl;
break;
}
system("pause");
}
输入2时结果是:two three 不注释是two
C++语言中switch语句中case有无break的区别
求二维数组的行和列:
row=sizeof(a)/sizeof(a[0]);
col=sizeof(a[0])/sizeof(a[0][0]);
1、友元关系是一个类A主动声明友元类和友元函数B,提供给它们对本类的访问特许。B可以
通过A的对象名
访问A的
私有和保护成员
。单向、不能传递、不能继承、
2、初始化:在定义一个变量和常量时指定的初值;赋值:在定义一个变量和常量后使用赋值运算符修改它的值。常量必须初始化。
int main(){
int *p;
*p=9;
cout<<"P的值:"<<*p;
return 0;
}
隐患:未初始化,随便指向某内存非常危险。(给随便一地址赋值)3、静态变量生命周期与程序一样:在所有函数外定义、在函数中用static定义(局部可见)。与C不同:有静态成员变量和静态成员函数,可以在不同时期调用的函数进行通信。
局部静态变量
#include<iostream>
using namespace std;
void fun()
{
int i = 1; // 局部变量,具有动态生存期,每次进入函数时都初始化
static int j = 2; //静态局部变量,具有全局寿命,局部可见,只第一次进入函数时被初始化
}
int main()
{
static int k; //静态局部变量,具有全局寿命,局部可见 static未定义初值自动为0 普通动态生存期变量不赋初值意味着初值不确定。int x;
cout<<j ; //j=0
}
不会随着每次函数调用产生副本,也不会随着函数返回而失效。一次调用返回之后,下次再调用时这个变量还会保持上一次完成的值,而不是再次被初始化。
4、数组做形参:
void f(int a[])
void f(int a[3])
void f(int *a)//正确
void(int a)//是错的
5、int a[10] a是数组首元素的地址,&a是整个数组地址。a+1步长是4,&a+1步长是40。
6、new 返回一个指向新分配内存首地址的类型的指针。 delete也是返回指针。
new和delete可以重载。
自动调用类的构造函数,Testclass *p=
new
Testclass; delete p;
int* point=new int(2)。括号内不写数值代表0。若不希望在分配内存后设定初值,可以去掉括号int* point=new int。delete point/delete [] point.
内存泄露:不释放会导致动态分配内存无法回收,使程序占据的内存越来越大。
malloc:int* a; a =(int*)malloc(sizeof(int)); 前面是强制转换成的指针类型,与要赋值的变量类型一样。后面是为了计算内存大小的。若前后不一致,int* p = (int *) malloc (1); Int指针占4个字节,却只分配1个,会导致出错。
malloc free返回void* 指针。
7、进程是一个“执行中的程序”。一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。
8、char、string、int
char to int:
line=['1''2''5'' ''3' '5']; 转成b=[125 3 5]:用‘1’-‘0’会将char转int,然后再*10或*100
char to string
#include <fstream>
#include <string>
#include <iostream>
#include <sstream>
using namespace std;
string x;
int main()
{
ifstream in("roget.txt");
string filename;
string line;
while (getline (in, line)) // line中不包括每行的换行符
{
stringstream ss(line);
while(ss>>x) //x=125 3 5 是字符串
cout<<x<<endl;
}
return 0;
}
string to int:
#include <cstdlib>
temp[i]=atoi(x.c_str()); //temp=[125,3,5]是整形
memset: 对一段内存空间赋值为某个字符 char a[10]; memset(a,'e',sizeof(a))
struct和typedef struct的区别
typedef struct _point{
int x;
int y;
}point; //类的别名
point p1;//相当于struct _point p1;
struct _point{
int x;
int y;
}qw; //同时定义类和对象实例
qw p2; p2.x=1;//是错误的 本身就是对象
qw.x=1;//正确
死循环:for(;;){} while(1){}
do while是先执行再判断,无论对错都会执行一次。while是先判断可能一次都不执行。
const常量必须被初始化且不能更新
printf(%m.nd) m定义的是总的宽度,后边的定义的是输出的个数。m<0左对齐(默认右对齐即往左边补空格)
printf("%.5s","abcdefg");的输出结果是abcde
printf("%5s","abcdefg"); abcdefg
printf("%8.2s\n", "abcd"); // ------ab左边用8-2个空格补全