变量和基本类型

1.含有无符号类型表达式

若定义 unsigned u = -42;
那么输出值会是429496726 (int 32位);
将负数取正,然后取无符号数的模(无符号数的计量范围)与其正数相减。
2的32次方 = 429496726 ;
输出 :429496726 - 42 = 4294967254
当从无符号数中中减去一个值时,需要保证所得值不能是赋值。
若所得值为负值,则结果为取模值。

2.声明和定义的关系

声明:使得名字被程序所知,若一个文件想在别处定名名字需包含那个名字的声明。
定义:用于负责创建与名字有关联的实体。
extern int i; // 声明i而非定义i;
int j ;//定义j;
当给extern关键字标记的变量赋初值后,会变成定义:
extern double pi = 3.1416; 定义pi;

3.变量命名规范

1)体现具体含义
2)变量名一般小写
3)用户定义类首字母一般大写
4)标识符由多个单词组成,单词间须有区分。china_liaoning

4.作用域

全局作用域:只加 ::
例:

#include<iostream>
using namespace std;
int res = 10;
int main(int argc, const char** argv) {
  int res = 100;
  cout << res << " 局部 " << endl;
  cout << ::res << " 全局 " << endl;
  return 0;
}

5.复合类型:引用与指针

引用:为对象起了另一个别名。
一般指左值引用

int ival = 1024;
int &refVal = ival;
int &refVal2;//错误,引用必须初始化

1)定义引用时,程序把引用和它的初始值绑定在一起,不是将初始值拷贝给引用。
2)引用本身不是对象,不能定义引用的引用。

初始化常量引用不需要严格匹配;
const int &r = 42;正确:r是一个常量引用。
存在继承关系的类不需要严格匹配;

指针:
指针本身是一种对象,可以进行赋值和拷贝。
指针无须在定义时赋初值。

指针值:
指针值(地址)需应属以下状态:
1)指向一个对象
2)指向相邻对象所占空间的下一个位置
3)空指针
4)无效指针
void*指针:
一种特殊类型的指针,可以存放任意类型的对象地址
int *p,p2;其中p是指向int 的指针,p2是int;
int *p,*p2;均是指针;

6.const限定符

定义了一种变量,其值不发生改变。

int i = 1;
const int ci = i;//正确,i的值拷贝给了ci
int j = ci;//正确,ci的值拷贝给了j

const值仅在文件内有效。
常量引用:

int i = 42;
const int &r1 = i;//正确,常量引用
const int &r2 = 42;//正确,常量引用
int &r3 = r1*2; //错误,r3是普通的非常量引用

const指针:

int errNumb = 0;
int *const curErr = &errNumb;//常量指针,指针地址不发生改变,所指的值可以改变
const double pi = 3.1416;
const double *const pip = &pi;//均可以改变

从右向左阅读,离curErr最近的符号是从const,意味着curErr本身是一个常量对象,对象类型由声明符其余部分确定。声明符的下一个符号是*,意味着curErr是一个常量指针

顶层const
顶层const表示指针本身是个常量;
底层const表示指针所指的对象是个常量;

int i = 0;
int *const ptr1 = &i;//ptr1值无法改变,为顶层const
const int ci = 42;
const int *ptr2 = &ci;//ptr2值可以改变,为底层const

7.类型别名 typedef

自己写的另一篇文章参考:别名-typedef
typedef用于两种:1是类型别名;2是别名声明;
指针、常量、类型别名:

typedef char *pstring;//pstring是指向char的常量指针
const pstring cstr = 0;//cstr是指向char的常量指针(重要,需要理解!!!!!!!!)
const pstring *ps;

这里需要理解,const是对给定类型的修饰,pstring是指向char的指针,所以const pstring是指向char的常量指针,而非指向常量字符的指针。
不可以错误的把类型别名代入其中,替换成它原本样子。

const char *cstr = 0

声明语句中用到pstring时,基本数据类型时指针。当用char*重写声明语句后,数据类型变成了char,*变成声明符的一部分,此时const char是基本数据类型。前后两种声明含义截然不同。
前者是指向char的常量指针(顶层);
后者是声明了一个指向const char的指针;

8.预处理器

c++primer 第五版 p68
注:c++primer 第5版 p68

#ifndef  YU_CHULI_H
#define  YU_CHULI_H
#include <string>
struct ss{
    int a;
    int c;
};
#endif

避免重复包含头文件:如果 #ifndef为真,那么预处理器会继续处理,直到遇见 #endif,此时预处理变量YU_CHULI_H会被定义。若以后再包含本文件,则不会执行此之间的代码块,避免了重复定义。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值