<C++> 基础
一.标准
1.输入:cin >> 变量名;
2.输出:cout << 变量名;
3.换行并清空缓冲区:endl
4.头文件:#include<iostream>
输入输出流头文件 C++中的头文件都不用加.h
5.命名空间:using namespace std;
打开命名空间 标准C++库中的所有组件都是一个被称为std的名字空间中声明和定义的
1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 int a; 7 char b; 8 cin >> a >> b; 9 cout << a << " " << b << endl; 10 11 return 0; 12 }
二.作用域 命名空间
1.不同作用域的变量可以重名 使用时 用的是离的近的 作用域小的
2.作用域运算符:::
如果前面没有类名 命名空间名字代表全局的
1 #include<iostream> 2 using namespace std; 3 4 namespace Bird 5 { 6 int nAge = 100; 7 } 8 9 namespace Person 10 { 11 int nAge = 200; 12 } 13 14 using namespace Bird; 15 16 int main() 17 { 18 cout << nAge <<endl; 19 cout << Person::nAge <<endl; 20 21 return 0; 22 }
注:::的前面可以放命名空间的名字 类名 或者什么都不放
三.动态分配内存和释放
1.创建:指针变量 = new 数据类型;
注:new也是在堆区分配空间
1 int* p = new int; 2 cin >> *p; 3 cout << *p;
2.删除:delete 指针变量;
1 delete p; 2 p = 0;
注:这个是把p指向的空间删了 但是指针还在 还装着原来的地址
3.举例应用:
①一维数组:
1 int* arr = new int[3]; 2 delete[] arr; 3 arr = 0;
②二维数组:
1 int (*arr)[3]= new int[2][3]; 2 delete[] arr; 3 arr = 0;
注:在删除数组的时候 不管是几维的 只写一个中括号就可以了
③特别注意:在new的时候 []不要打成() !!!
1 int* arr = new int(10);
比如说这行代码 代表的是分配了一个空间 并且用10把这个空间初始化了
如果让arr[1] = 100的话就会崩 因为越界了 操作了不属于你的内存空间
所以因此我们也get到了一个新的初始化的方法:
1 int b(100);
这行代码执行完 b就是100了
四.范围for(C++11新标准)
1.自动遍历数组 直到最后一个元素:
1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 int arr[10] = {0,1,2,3,4,5,6,7,8,9}; 7 for(int nVal : arr) 8 cout << nVal << endl; 9 10 return 0; 11 }
nVal是一个值 即nVal→arr[i]
把每一个arr中元素的值装到nVal中 遍历一次装一个 会自动的遍历到最后
如果想控制数组的话还是要用for循环int i的那种方法去控制
2.auto:
1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 int a = 100; 7 auto b = a; 8 9 return 0; 10 }
那么b就是int类型的 auto会自动识别对应的类型 所以可以在for循环中去用auto
1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 int arr[10] = {0,1,2,3,4,5,6,7,8,9}; 7 for(auto nVal : arr) 8 { 9 cout << nVal << endl; 10 } 11 12 return 0; 13 }
五.bool布尔类型
1.bool类型占一个字节 而Win32中的BOOL类型是把int重命名占4个字节
2.返回类型:可以用于只有两种情况的时候
①true 1
②false 0
3.如果函数返回值通常是bool类型 代表这个函数是否执行成功
在写if()括号中的判断条件的时候 一定要注意些两个等号 不要丢等号
如果是一个等号 狠可能就进到if中了(0→假 非0→真)
六.string
1.直接看段代码:这段代码是错的错的错的!!!
1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 char* pName = new char[10]; 7 pName = "123456789"; 8 cout << pName << endl; 9 delete pName; 10 11 return 0; 12 }
pName并不是存到分配的空间中去了
pName一开始指向被分配的空间 然后又让pName指向了字符常量区
那么一开始分配的空间就找不到了 再delete就不能删了 会崩 因为字符常量区不让删
所以字符串的赋值一定不能用等号!!!
字符串的赋值用:strcpy_s(地址空间,长度,"你想存的字符串");
注:初始化和赋值的区分 就在于:定义的时候就给他一个值 就叫初始化
2.字符串的简单应用:
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 int main() 6 { 7 string str; 8 str = "aaa"; 9 cout << str << endl; 10 11 string str1; 12 str1 = str + "111"; 13 cout << str1 << endl; 14 15 str1 += "222"; 16 cout << str1 << endl; 17 18 cout<< (str == str1) << endl; 19 return 0; 20 }
注意:
①C++中定义字符串可以用string 非常方便 但是有头文件:#include<string> 没有.h
②字符串的拼接可以直接用+号
③可以如18行一样比较 这个比较结果为0(不等) 相等的话输出结果为1