一. 基础知识

● 程序和C/C++

程序: 根据Wirth (1976), Algorithms + Data Structures = Programs.

Whence C: 1972, Dennis Ritchie[ˈritʃi](丹尼斯·里奇), 贝尔实验室(Bell Labs), C语言是他和Ken Thompson在设计Unix操作系统时创建的, Ritchie因此被称为C语言之父和Unix之父.

Whence C++: 1983-1985, Bjarne Stroustrup([ˈbjɑːnə ˈsdʁʌʊ̯ˀsdʁɔb]本贾尼·斯特劳斯特卢普), 贝尔实验室(Bell Labs), C++是C的扩展, 最初被称为带类的C(C with class).

● 计算机系统的组成

● 信息存储单位 unit of storage

位(比特:bit,b,小写):度量数据的最小单位.

字节(Byte,B,大写):最常用的基本单位,1字节=8位

* 一个英文字母,无论大写和小写都是一个字符(character)=一个字节=8位。

一个汉字是一个字符=两个字节=16位。

K (千)字节(Kilobyte)            1K / 1KB / 1kB = 1024 Byte

M(兆)字节(Megabyte)        1M = 1024 K

G(吉) 字节(Gigabyte)        1G = 1024 M

T(太)字节(Terabyte)        1T = 1024 G

C/C++程序的编译过程

※ .cpp文件是文本文件(text file), .obj和.exe文件是二进制文件(binary file), lib是静态数据连接库文件

● C/C++程序结构

  • 上面是一个C语言程序的案例; 还应注意以下几点, 在声明区上面经常有注释来说明程序的先关信息, 例如:

/***********************************

*    程序文件名: test.cpp                    *

*    本程序功能: 显示Hello World         *

*    设计者: Abelhinho                    *

*    时间: 12-25-2015                        *

***********************************/

● main()函数的返回值

整数, 但一般是-1)表示程序结束时出错了.

大多数情况下main()函数的返回值我们是用不着的,但操作系统支持一个进程来获取别的进程的退出代码,这个时候这个返回值就有意义了。

例如,你在写一个自动安装程序,要依次安装多个应用程序,那么你怎么知道其中某个程序的安装是否正常结束了呢,因为如果某个出错了再继续也许是毫无意义的,你就可以通过别的进程的退出码来判断了。

※ 在 main()函数中,return (0)、exit(EXIT_SUCCESS) 和 exit(0) 基本上是等价的。

但是事实上 return 和直接调用 exit 的效果并不完全一样。一般情况下应使用 return() 来结束 main(),但如果 main() 中分配了内存,则应使用 exit() 结束.

一般来说,除非是多次分配或者系统的内存空间非常紧张,否则 main(),特别是短命程序如命令行工具的 main() 中分配的内存不应使用 free() 释放)。

● 输入Hello World!

#include <iostream>        //头文件引用

using namespace std;    //命名空间的引用; 如果写成<iostream.h>, 就不用写下面的 using namespace std; 不过, c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h, 虽然编译和运行都没问题

//另外, iostream是一个头文件,系统头文件不带.h后缀, 也就是说, 自定义的头文件要带.h后缀

int main()

{

cout<<"Hello World!"<<endl;    //或者写成cout<<"Hello World!\n"

    return 0;

}

● C/C++符号 C/C++ tokens

C/C++ tokens are of six types. They are:

1. Keywords (eg: int, while),

2. Identifiers (eg: main, total—reserved or self-defined),

3. Constants (eg: 10, 20),

4. Strings (eg: "total", "hello"),

5. Special symbols (eg: (), {}),

6. Operators (eg: +, /,-,*)

● C++的关键字表

C++的关键字表

asm

const_cast

explicit

inline

public

struct

typename

auto

continue

export

int

register

switch

union

bool

default

extern

long

reinterpret_cast

template

unsigned

break

delete

false

mutable

return

this

using

case

do

float

namespace

short

throw

virtual

catch

double

for

new

signed

true

void

char

dynamic_cast

friend

operator

sizeof

try

volatile

class

else

goto

private

static

typedef

wchar_t

const

enum

if

protected

static_cast

typeid

while

● 自定义标识符(identifier)的要求

① 可以使用大小写字母, 下划线, 数字(其余的都不行,比如汉字、连字符hyphen、运算符+、-、/), 但第一个字符必须是字母或者下划线(underline/underscore), 不过应避免第一个字符是下划线"_"或双下划线"__", 因为一些语言内部名称或预定义宏也是用"_"或"__", 从而造成命名冲突. 另外注意:

② 字母区分大小写;

③ 变量名最好用英文,而且要有所含义, 即通过变量的名称就能猜测变量的意思'

④ C语言中变量的首字母一般是小写的

⑤ linux、unix的风格都是小写字母,windows是小写大写结合;

⑥ 类名一般以大写C开头, 如CBook, CStudent

● 匈牙利命名法(Hungarian notation)

※ 之所以叫做匈牙利命名法是为了纪念匈牙利籍的 Microsoft 程序员 Charles Simonyi.

基本原则是:变量名=属性+类型前缀+对象描述

属性(要用时在类型前缀前加):

g_        全局变量

c_        常量

m_        c++类成员变量

s_        静态变量

类型前缀:

a        数组

p        指针

fn        函数

h        句柄

l        长整型

b        布尔

f        浮点型(有时也指文件)

个字节, 16位, 简称WORD; 两个字为双字,4个字节, 32位, 简称DWORD,

sz        以'\0'结束的字符串

n        短整型

d        双精度浮点

c        (通常用cnt)计数

ch        (通常用c)字符

i        (通常用n)整型

by        字节

w        字

r        实型

u        无符号

lp        32位长整数指针

msg        消息

描述部分:

Max        最大

Min            最小

Init            初始化

T            (或Temp)临时变量

Src            源对象

Dest        目的对象

● 有关foo

术语foobar, foo, bar, baz 和qux经常在计算机编程或计算机相关的文档中被用作占位符的名字(placeholder name)。当变量,函数,或命令本身不太重要的时候,foobar, foo, bar, baz 和qux就被用来充当这些实体的名字,这样做的目的仅仅是阐述一个概念,说明一个想法。这些术语本身相对于使用的场景来说没有任何意义。Foobar经常被单独使用;而当需要多个实体举例的时候,foo,bar,和baz则经常被按顺序使用。

● 声明 declare & 定义 define

一. 变量的声明有两种情况:

(1) 一种是需要建立存储空间的(定义、声明)。例如:int a;表示在声明的时候就已经建立了存储空间。

(2) 另一种是不需要建立存储空间的(声明)。例如:extern int a;其中变量a是在别的文件中定义的。

前者是"定义性声明(defining declaration)"或者称为"定义(definition)",而后者是"引用性声明(referncing declaration)"。从广义的角度来讲声明中包含着定义,但是并非所有的声明都是定义,例如:int a它既是声明,同时又是定义。然而对于extern int a; 来讲它只是声明不是定义。一般的情况下我们常常这样叙述,把建立空间的声明称之为"定义",而把不需要建立存储空间称之为"声明"。很明显我们在这里指的声明是狭义的,也就是说非定义性质的声明。

二. 函数的定义与声明:

(1) 函数声明(与"函数原型"形式相同)是让编译器知道函数的返回值类型, 名称和形参等信息, 函数的声明在主函数之前;

※ 以前的C版本的函数声明方式不是采用函数原型,而只是声明函数名和函数类型。如:float add(); 不包括参数类型和参数个数。系统不检查参数类型和参数个数。新版本也兼容这种用法,但不提倡这种用法,因为它未进行全面的检查.

(2 ) 函数定义是让编译器知道函数的功能, 函数的定义在主函数之后;

(3) 这里的声明是狭义的, 我们也可以直接在主函数之前声明函数后直接定义函数

三. 类的声明和定义:

(1) 类的声明是让编译器知道类的名称及其内部结构(数据成员)和接口(成员函数);

(2) 类的定义(又称类体的定义)指的是成员函数的定义.

(3) 在软件中, 类的声明一般在.h文件里, 类的定义一般在.cpp文件里

A declaration introduces an identifier and describes its type, be it a type, object, or function. A declaration is what the compiler needs to accept references to that identifier. These are declarations:

extern int bar;

extern int g(int, int);

double f(int, double); // extern can be omitted for function declarations

class foo; // no extern allowed for type declarations

A definition actually instantiates/implements this identifier. It's what the linker needs in order to link references to those entities. These are definitions corresponding to the above declarations:

int bar;

int g(int lhs, int rhs) {return lhs*rhs;}

double f(int i, double d) {return i+d;}

class foo {};

A definition can be used in the place of a declaration.

An identifier can be declared as often as you want. Thus, the following is legal in C and C++:

double f(int, double);

double f(int, double);

extern double f(int, double); // the same as the two above

extern double f(int, double);

However, it must be defined exactly once. If you forget to define something that's been declared and referenced somewhere, then the linker doesn't know what to link references to and complains about a missing symbols. If you define something more than once, then the linker doesn't know which of the definitions to link references to and complains about duplicated symbols.

● 移位运算

#include<iostream>

using namespace std;

int main()

{

int a=0x40,b,c;        //整型不一定是十进制的, 这里是十六进制的

cout<<"a in decimal system is: "<<a<<dec<<endl;    //C++默认输出十进制, 这里的dec可以省略, 即    cout<<"a in decimal system is: "<<a<<endl;

cout <<b<< endl;

cout <<c<< endl;

return 0;

}

● 十进制转二进制

#include<iostream>

using namespace std;

int main()

{

int a = 10;

char binbuf[32]; //存储二进制字串的空间

表示2进制

}

#include<iostream>

using namespace std;

int main()

{

int n;

cout << "input n:";

cin >> n;

for(int i=1; i<=32; i++)

{

cout << (n<0?1:0) << (i%8==0?" ":"");

n = n<<1;

}

cout << endl;        // 回车的意思, 相当于C语言里面的printf("\n")

return 0;

}

(C/C++学习笔记) 一. 基础知识的更多相关文章

  1. MyBatis:学习笔记(1)——基础知识

    MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...

  2. C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)

    一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...

  3. C#学习笔记(基础知识回顾)之值传递和引用传递

    一:要了解值传递和引用传递,先要知道这两种类型含义,可以参考上一篇 C#学习笔记(基础知识回顾)之值类型和引用类型 二:给方法传递参数分为值传递和引用传递. 2.1在变量通过引用传递给方法时,被调用的 ...

  4. C#学习笔记(基础知识回顾)之值类型和引用类型

    一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...

  5. Quartz学习笔记:基础知识

    Quartz学习笔记:基础知识 引入Quartz 关于任务调度 关于任务调度,Java.util.Timer是最简单的一种实现任务调度的方法,简单的使用如下: import java.util.Tim ...

  6. .net学习笔记---xml基础知识

    一.XML简介 XML是一种标记语言,用于描述数据,它提供一种标准化的方式来来表示文本数据.XML文档以.xml为后缀.需要彻底注意的是XML是区分大小写的. 先从一个简单的XML例子来了解下xml基 ...

  7. Docker的学习笔记(一)基础知识

    概述 本人最近在学习docker相关的知识,既是工作本身的需要也是自己对技术的追求的必要,以后我也会推出容器相关的随笔,既可以增长自己的知识,也可以和读者广泛交流,岂不乐乎?话不多说.第一篇先介绍do ...

  8. Scala学习笔记--正则表达式基础知识、如何在scala内使用

    正则表达式语法:https://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx 基础知识:正则表达式30分钟入门教程 http://www. ...

  9. C#学习笔记(基础知识回顾)之枚举

    一:枚举的含义 枚举是用户定义的整数类型.在声明一个枚举时,要指定该枚举的示例可以包含的一组可接受的值.还可以给值指定易于记忆的名称.个人理解就是为一组整数值赋予意义. 二:枚举的优势 2.1:枚举可 ...

随机推荐

  1. JS中如何生成全局变量

    JS中如何生成全局变量 一.总结 一句话总结:在函数内部,一般用var声明的为局部变量,没用var声明的一般为全局变量 在函数内没用var声明的一般为全局变量 1.js中的函数中的this指向的是谁? ...

  2. RepBaseRepeatMaskerEdition下载 | RepeatMasker

    开源的生物信息世界居然有这么个需要注册才能下载的工具,开源世界不是怎么方便怎么来吗? 这个注册真的麻烦,这里上传了一个可以使用的版本. RepBaseRepeatMaskerEdition-20170 ...

  3. pythoncook 文件和io

    1.文件不存在,则写入:文件存在则,报错 try: with open('file','x') as f: f.write() except FileExistsError: print('file ...

  4. LeetCode--387--字符串中的第一个唯一字符

    问题描述: 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. 案例: s = "leetcode" 返回 0. s = "lovel ...

  5. 使用jquery.mobile和WebSQL实现记事本功能

    1.记事本列表页 1.1.页面结构与样式: <div data-role="page" id="home"> <div data-role=& ...

  6. LoveIsIntheAir模板换背景

    /*simplememory*/#google_ad_c1, #google_ad_c2 {display:none;}.LoveIsIntheAir a, .LoveIsIntheAirdiv, . ...

  7. 小程序传id值

    xml文件 <view class='bgcf bsbb pl30 pr30 pt30 pb30 df fww' >       <block wx:for="{{intr ...

  8. laravel安装Excel安装不上

    1.生明版本号 composer require maatwebsite/excel 2.1我的PHP是7.0安装Excel得2.1 2.在composer.json中加入 "maatweb ...

  9. react中使用antd Table组件滚动加载数据的实现

    废话不多说,直接上代码.一目了然. import React, { Component } from "react"; import { Table } from "an ...

  10. Leetcode 863. 二叉树中所有距离为 K 的结点

    863. 二叉树中所有距离为 K 的结点  显示英文描述 我的提交返回竞赛   用户通过次数39 用户尝试次数59 通过次数39 提交次数174 题目难度Medium 给定一个二叉树(具有根结点 ro ...