c++初始
目录
一数据类型
1.
2.sizeof
3.布尔
4.字符串类型
二.数据输入与输出
1.输出
2.输入
三.运算
1.加减乘除取模,++,--都一样
2.逻辑非与或,与C语言一样
3.比较运算符,与C语言一样
4.三目运算符(与C语言一样)
四.条件,循环语句与C语言一样
五.一维数组
1.特点
2.定义
3.冒泡排序
六.二维数组
1.定义
2.地址
七.函数
1.基础函数跟C语言一样
2.函数的分文件编写:
八.指针
1.基础(与C语言一样)
2.指针所占内存空间
3.空指针/野指针
4.const(也可以详见C语言书)
一数据类型
1.
| **数据类型** | **占用空间** | 取值范围 |
| short(短整型) | 2字节 | (-2^15 ~ 2^15-1) |
| int(整型) | 4字节 | (-2^31 ~ 2^31-1) |
| long(长整形) | Windows为4字节,Linux为4字节(32位),8字节(64位) | (-2^31 ~ 2^31-1) |
| long long(长长整形) | 8字节 | (-2^63 ~ 2^63-1) |
| float | 4字节 | 7位有效数字 |
| double | 8字节 | 15~16位有效数字 |
|char | 1字节 |
C和C++中字符型变量只占用1个字节
2.sizeof
统计数据类型所占内存大小
sizeof(数据类型);
3.布尔
bool a = true --- 真(本质是1)
bool a = false --- 假(本质是0)
#include<iostream>
using namespace std;
int main() {
bool flag = true;
cout << flag << endl; // 1
flag = false;
cout << flag << endl; // 0
cout << "size of bool = " << sizeof(bool) << endl; //1
system("pause");
return 0;
}
PS:输入的时候,所有非零值都代表的是真
例如:
#include<iostream>
using namespace std;
int main()
{
bool a =199;
cout << "a是真吗,a = " << a << endl;//a是真吗,a = 1
return 0;
}
4.字符串类型
(1)C语言风格
char 变量名[] = "......";
(2)c++风格
#include<string>;
string s = "........";
#include<iostream>
#include<string>
using namespace std;
int main()
{
char s1[] = "hhhh";
string s2 = "阿萨德";
cout<< s1 << s2<<endl;
return 0;
}
二.数据输入与输出
1.输出
cout<< "(要输出的语句)"<< (变量)<< ...... <<endl;
PS:endl是换行符
#include<iostream>
using namespace std;
int main()
{
bool a =true;
cout << "a是真吗,a = " << a <<"哎嘿嘿"<< endl;
return 0;
}
2.输入
cin >> 变量
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
cout << "请输入字符串型变量:" << endl;
cin >> str;
cout << str << endl;
}
三.运算
1.加减乘除取模,++,--都一样
PS:浮点型不能取模运算
2.逻辑非与或,与C语言一样
3.比较运算符,与C语言一样
唯一需要注意的是,使用时要加括号,否则会报错(无法确定需要哪个 函数模板 "std::endl" 实例)
cout << (a == b) << endl;
#include<iostream>
using namespace std;
int main()
{
int a =10;
int b = 20;
cout << (a==b) << endl;
return 0;
}
4.三目运算符(与C语言一样)
expression1 ? expression2:expression3;
如果表达式1的值为真,执行表达式2,否则执行表达式3。
四.条件,循环语句与C语言一样
五.一维数组
1.特点
特点1:数组中的每个数据元素都是相同的数据类型
特点2:数组是由连续的内存位置组成的
特点3: 可以统计整个数组在内存中的长度
特点4: 可以获取数组在内存中的首地址
#include<iostream>
using namespace std;
int main() {
//数组名用途
//1、可以获取整个数组占用内存空间大小
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
cout << "整个数组所占内存空间为: " << sizeof(arr) << endl;
cout << "每个元素所占内存空间为: " << sizeof(arr[0]) << endl;
cout << "数组的元素个数为: " << sizeof(arr) / sizeof(arr[0]) << endl;
//2、可以通过数组名获取到数组首地址
cout << "数组首地址为: " << arr << endl;
cout << "数组中第一个元素地址为: " << &arr[0] << endl;
cout << "数组中第二个元素地址为: " << &arr[1] << endl;
//arr = 100; 错误,数组名是常量,因此不可以赋值
return 0;
}
2.定义
(1)数据类型 数组名[ 数组长度 ];
(2)数据类型 数组名[ 数组长度 ] = { 值1,值2 ...};`
(3)数据类型 数组名[ ] = { 值1,值2 ...};
3.冒泡排序
#include<iostream>
using namespace std;
int main() {
int arr[9] = { 4,2,8,0,5,7,1,3,9 };
for (int i = 0; i < 9 - 1; i++)
{
for (int j = 0; j < 9 - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int i = 0; i < 9; i++)
{
cout << arr[i] << " ";
}
return 0;
}
六.二维数组
1.定义
(1.) ` 数据类型 数组名[ 行数 ][ 列数 ]; `
(2). `数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } };`
(3.) `数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};`
(4). ` 数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};`
PS:在定义二维数组时,如果初始化了数据,可以省略行数
2.地址
与C语言一样
二维数组的变量名 = 二维数组地址 =首元地址 = 第一行地址
#include<iostream>
using namespace std;
int main() {
//二维数组数组名
int arr[2][3] =
{
{1,2,3},
{4,5,6}
};
cout << "二维数组大小: " << sizeof(arr) << endl;//24,整个二维数组大小
cout << "二维数组一行大小: " << sizeof(arr[0]) << endl;//12
cout << "二维数组元素大小: " << sizeof(arr[0][0]) << endl;//4
cout << "二维数组行数: " << sizeof(arr) / sizeof(arr[0]) << endl;//2
cout << "二维数组列数: " << sizeof(arr[0]) / sizeof(arr[0][0]) << endl;//3
//地址
cout << "二维数组首地址:" << arr << endl;//0x61fe00
cout << "二维数组第一行地址:" << arr[0] << endl;//0x61fe00
cout << "二维数组第二行地址:" << arr[1] << endl;
cout << "二维数组第一个元素地址:" << &arr[0][0] << endl;//0x61fe00
cout << "二维数组第二个元素地址:" << &arr[0][1] << endl;
return 0;
}
七.函数
1.基础函数跟C语言一样
2.函数的分文件编写:
1. 创建后缀名为.h的头文件
2. 在头文件中写函数的声明
//swap.h文件
#include<iostream>
using namespace std;
//实现两个数字交换的函数声明
void swap(int a, int b);
3. 创建后缀名为.cpp的源文件
4. 在源文件中写函数的定义(注意加上库函数xxx.h)
//swap.cpp文件
#include "swap.h"
#include<iostream>
using namespace std;
void swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
}
int main()
{
int a = 100;
int b = 200;
swap(a, b);
return 0;
}
八.指针
1.基础(与C语言一样)
牢记:&地址符
*解引符
#include<iostream>
using namespace std;
int main()
{
int a =10;
int * p = &a;
cout << p<<endl;//0x61fe14
cout << &a;//0x61fe14
return 0;
}
2.指针所占内存空间
#include<iostream>
using namespace std;
int main()
{
int a =10;
int * p = &a;
cout << sizeof(p)<<endl;//8
return 0;
}
总结:所有指针类型在64位操作系统下是8个字节
所有指针类型在32位操作系统下是4个字节
3.空指针/野指针
#include<iostream>
using namespace std;
int main() {
//指针变量p指向内存地址编号为0的空间
int * p = NULL;
cout << p << endl;//0
//访问空指针报错
//内存编号0 ~255为系统占用内存,不允许用户访问
cout << *p << endl;
return 0;
}
//访问空指针报错
//内存编号0 ~255为系统占用内存,不允许用户访问
(2)野指针:指针变量指向非法的内存空间
4.const(也可以详见C语言书)
#include<iostream>
using namespace std;
int main() {
int a = 10;
int b = 10;
//const修饰的是指针,指针指向可以改,指针指向的值不可以更改
const int * p1 = &a;
p1 = &b; //正确
//*p1 = 100; 报错
//const修饰的是常量,指针指向不可以改,指针指向的值可以更改
int * const p2 = &a;
//p2 = &b; //错误
*p2 = 100; //正确
//const既修饰指针又修饰常量
const int * const p3 = &a;
//p3 = &b; //错误
//*p3 = 100; //错误
return 0;
}
总结:const修饰常量,就是指针常量,不可以改指针方向,可以改值。
int * const p2 = &a;
//p2 = &b; //错误
*p2 = 100; //正确
const修饰指针,就是常量指针,不可以改值,可以改指针方向。
const int * p1 = &a;
p1 = &b; //正确
//*p1 = 100; 报错
硬记:const p,不可以改变指针方向, int * const p2 = &a;
const int*,可以改变指针方向, const int * p1 = &a;