[笔记]黑马C++基础入门笔记

变量存在的意义:方便我们管理内存空间 变量存在的意义:方便我们管理内存空间
变量创建的语法:数据类型  变量名=变量初始值;
                                  int            a = 10 ; 

关键字

 

标识符命名不能数字开头

 

int 最常用  short只能输出+- 32767以内的数字 不然溢出

可以利用sizeof()求数据类型占用空间

有效数字把整数位也算上,不只是算小数。

float f1 = 3.14f; //最后f表示这个3.14数字是float类型的

float f1 = 3.14;  //3.14这个数字是double类型的 但是f1是float

默认情况下一个小数输出只输出(显示,不是存储)最多6位有效数字

科学计数法 

float f2 = 3e2;  // 3*10^2
cout << "f2=:" << f2 << endl;  //300
float f3 = 3e-2;  // 3*10^-2
cout << "f3=:" << f3 << endl;  //0.03


    char ch = 'a';
    cout << ch << endl;  //a
    cout << "char字符所占的空间:" << sizeof(char) << endl;
    cout << (int)ch << endl;  // 97

注意是\不是/ 注释是//   输出斜杠是\\

\t:制表表示生成一个八个空格区域 跟前面的内容一起补齐8个空格 比如a\t 那就1个a 7个空格

用于水平对齐每一行 

注意C风格中 char str[]=“XXXX”  这个中括号[]不可以少 不然就是单字符 而且要双引号 不是单引号 不然是单字符

C++风格 用string时 要加入一个头文件 #include<string>

 

定义初值用true 也可以用数字1  2  3 100……

给bool用键盘赋值时要用数字赋值 比如0 1  2 3

不能再用true

bool flag =true ;
    cout << "请给flag赋值:" <<endl;
    cin >> flag;
    cout << "flag=" << flag<< endl;

主要看最后面的几个 

/为除

%为取余数

 注意:两个整数用/相除的时候会舍去小数部分 只留下整数部分

注意:俩小数不可以用%  即不可以取模 取余数

前置:先写运算 再写变量  效果是先运算(+1  -1) 再表达式运算

 后置:先写变量 再写运算  效果是先表达式运算(整个式子算完) 再运算(+1  -1)

!= 为不等于

输出的结果是真或者假  即1或者0

注意cout<<(a==b)<<endl;

中间的a==b必须加括号 因为==的优先级没有<<高。

注意:在C++中除了0都为1  只要不是0  都为真   只有0 才是0 为假  不过习惯用1代表真  但是0.1  也算真(小数注意是double  别int)

 

注意:if条件后不要加分号  (){}是连在一起的

if …… else if …… else

 

    比如:

    int a = 10;
    int b = 20;
    int c = 0;

    c=(a > b ? a : b);
    cout << "c=" << c << endl;   //20

 实现把a和b中更大的值赋值给c

 

每个case分支都要加break,不然会顺序结构往下走其他case里的情况  case只是选择了一个开头

不在所有case里的其他情况就是default:

while(1)的时候表示一直运行

rand()%100:生成随机数 范围为0~99 

break也可以在while里退出循环 

    srand((unsigned int)time(NULL));//随机数种子 利用当前时间得到随机数,防止每次生成的都是42伪随机

do while一定会先做一次 再来判断

通常约定俗成外层的循环变量因子为i 内层为j

 

可以用于筛选

注意:下标从0开始 

 

 cout arr时输出的是16进制的地址,但是cout (int)arr就输出10进制了

直接输出arr是arr的地址,但是要想看元素比如arr[1]的地址 要加& 不然输出的是这个元素的值而不是地址

比如cout (int)&arr[1]

N个数字,做N-1轮排序,第i轮的对比次数是N-i

每次冒泡排序都能找出一个当前最大值  就这样找N-1个最大值配合最后一个数排序完成

注意第二种方式里数据不一定只有四个  举例子二一 

中间记得也要加逗号!

第四种记住 可以少行数 不能少列数!

 

总结:函数定义里小括号内称为形参,函数调用时传入的参数称为实参

 如果函数不需要返回值,声明的时候可以写void

后面可以不跟(最好)或者跟return; 

值传递:不会影响实参,仅仅是形参改变

声明可以先调用再定义

#include“”   双引号表示自己定义的一个头文件! <>表示尖括号

系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找。

源文件里要加入#include“头文件.h” 

注意:头文件里不仅要写函数声明,也要加入

#include<iostream>
using namespace std;

int *p;

p=&a; //p的值是a的地址

注意:*p=a(所以可以直接修改*p来修改a)  //*p的值是a的值

注意:指针保存的一直是地址不是值

总结:所有指针类型在32位操作系统下是4个字节

 int * p = NULL;

 不能修改空指针*p 

注意:int *p=&a表示把a的地址用p指向

如果是int *p=0x1100 后面0x1100是一个数字 不是地址 我们可以用

 int * p = (int *)0x1100;

就是在数字前面加入(int *)强行把他转换成一个地址 但是这样就变成了野指针

 

1. const int*p=&a;

常量指针

特点:指针的指向可以修改,但是指针指向的数值a不可以修改

即地址可以改(可以指向b c d) a的值不可以改 

2. int * const p=&a

指针常量

特点:指针的指向不可以改 只能指向a  但是指向的数值a的大小可以改变

3. const int * const p =&a

特点:指针指向的东西和指向的东西的值都不能改

地址传递(不同于值传递):能改变实参

总结:如果不想修改实参,就用值传递,如果想修改实参,就用地址传递

总结:当数组名传入到函数作为参数时,被退化为指向首元素的指针

比如定义一个冒泡函数

void bubbleSort(int * arr, int len)

 我们把一个数组arr[10]={}传递进去时,会退化成一个指针*arr  指向首个元素arr[0]

结构体就是一个数据类型 类似int 

如果是结构体指针,那么用->代替.

比如student结构体的name  可以用xx.name  指针的话就是p->name

 

跟普通的值传递地址传递一样 只不过变量变成了结构体

地址传递中改变形参会带着把main函数里的实参也改变掉 

8.7 结构体中 const使用场景

作用:用const来防止误操作

加指针是为了节省空间 不用再开辟一个空间给形参

加入const 对形参指针常量,一旦函数里对这个指针修改 就会报错!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值