C++学习笔记1--基础知识

#include <iomanip>
setpresition(int n); 设置输出精度浮点数是n.
【goto声明】
goto也被称为无条件分支语句购买勇于改变运行顺序的声明。goto一般声明格公式:
goto 牌号。
例:
#include <iostream>
using namespace std;
int main(int args, char *argv[]) {
    int ivar = 0;
    int num = 0;
label:
    ivar ++;
    num += ivar;
    if(ivar < 10) {
        goto label;
    }
    cout << num << endl;
    return 0;
}

goto语句效率较低。
goto语句不能越过复合语句之外的变量定义的语句。


调用默认參数的函数使用方法举例:

#include <iostream>
using namespace std;
void OutputInfo(const char* pchData="Stay hungry,Stay foolish.") {
    cout << pchData << endl; //输出信息
}
int main(int argc, int *argv[]) {
    OutputInfo();   //利用默认值作为函数实际參数
    OutputInfo("lasolmi");  //直接传递实际參数
    return 0;
}

【可变參数】
声明可变參数的函数和声明普通函数一样,仅仅是參数列表中有一个"..."。比如:
void OutputInfo(int num, ...)
对于可变參数的函数。在定义函数时须要一一读取用户传递的实际參数。

能够使用va_list类型和va_start、va_arg、va_end 3个宏读取传递到函数中的參数值。使用可变參数须要引用STDARG.H头文件。
例:定义并调用可变參数函数

#include <iostream>
#include <stdarg.h>
using namespace std;
void OutputInfo(int num,...) {
    va_list arguments;
    va_start(arguments, num);
    while(num--) {
        char *pchData = va_arg(arguments,char*);
        int iData = va_arg(arguments, int);
        cout << pchData << endl;
        cout << iData << endl;
    }
    va_end(arguments);
}
int main(int argc, int *argv[]) {
    OutputInfo(2, "Bejing", 2008, "lasolmi", 2014);
    return 0;
}

重载函数:指多个函数具有同样的函数标识符,但參数类型或參数个数不同。

函数调用时,编译器以參数的类型及个数来区分调用哪个函数。
【内联函数 inline】
使用内联函数能够降低函数调用带来的开销(在程序所在文件内移动指针寻找调用函数地址带来的开销),应该在函数实现代码非常简短或者调用该函数次数相对较少的情况下将函数定义为内联函数。
变量的存储类别:auto; static; register; extern
 auto变量:C++中默认的存储类型
  自己主动变量的作用域仅限于定义该变量的个体内。

动态存储,栈中不同个体中同意使用同名的变量而不会混淆。


 static变量:
  在函数中定义就在函数中使用;但生命期为整个程序。


 register变量:
  寄存器变量将局部变量的值存放在CPU的寄存器中,使用时不须要訪问内存,而直接从寄存器中读写。
  (1)寄存器变量属于动态存储方式。凡须要使用静态存储方式的变量不能定义为寄存器变量。
  (2)编译程序会自己主动决定哪个变量使用寄存器存储。register能够起到程序优化的作用。
 extern变量:
  在使用其它源文件的全局变量时,仅仅须要在本源文件里使用externkeyword来声明这个变量就可以。
指向函数的指针:指针变量也能够指向一个函数。一个函数在编译时被分配给一个入口地址。这个函数入口地址就称为函数的指针,能够用一个指针变量指向函数,然后通过该指针变量调用此函数。
例:

#include <iostream>
#include <iomanip>
using namespace std;
int avg(int a, int b);
int main(int argc, int *argv[]) {
    int iWidth, iLength, iResult;
    iWidth = 10;
    iLength = 30;
    int (*pFun)(int, int); //定义函数指针
    pFun = avg;
    iResult = (*pFun)(iWidth,iLength);
    cout << iResult << endl;
    return 0;
}
int avg(int a, int b) {
    return (a+b)/2;
}

【引用】
引用的形式:
数据类型 & 表达式
比如:
int a = 10;
int & ia = a;
ia = 2;
定义了一个引用变量ia。它是变量a的别名,对ia的操作与对a的操作全然一样。ia=2把2赋给a。&ia返回a的地址,运行a=2和运行ia=2等价。
使用引用的说明:
(1)一个C++引用被初始化后,无法使用它再去引用还有一个对象,它不能被又一次约束。
(2)引用变量仅仅是其它变量的别名,对他的操作与原来对象的操作具有同样作用。
(3)指针变量与引用有两点主要差别:一个指针是一种数据类型,而引用不是一个数据类型,指针能够转换为它所指向变量的数据类型,以便赋值运算符两边的类型想匹配;而在使用引用时,系统要求引用和变量的数据类型必须同样,不能进行类型转换。二是引用使用起来比指针方
便。
(4)引用应该初始化,否则会报错。
使用引用传递參数
swap(int &a, int &b) {
    int tmp = a; a = b; b = tmp;
}
指针传递參数
swap(int *a, int *b) {
    int tmp = *a; *a = *b; *b = tmp;
}
a[i][j] == *(*(a+i)+j)
【指针数组】
一维指针数组的定义形式为:
类型名 *数组名[数组长度];
比如:int *p[5];
指针数组中的数组名也是一个指针变量,该指针变量为指向指针的指针。


例:使用结构体指针变量引用结构体成员。

#include <iostream>
using namespace std;
int main(int argc, int *argv[]) {
    struct PERSONINFO {
        int index;
        char name[30];
        short age;
    }*pPersonInfo, pInfo={0,"lasolmi",21};
    pPersonInfo = &pInfo;
    cout << pPersonInfo->index << endl;
    cout << pPersonInfo->name << endl;
    cout << pPersonInfo->age << endl;
    return 0;
}

【结构体的嵌套】
(1)在结构体中定义子结构体。


(2)在定义时声明其它已定义好的结构体变量。
可在声明结构体数组时直接对数组进行初始化:

struct PersonInfo {
    int index;
    char name[30];
    short age;
}Person[4] = {
    {1, "figo", 23},
    (2, "ling", 22),
    (3, "me", 21),
    (4, "cong", 20)
};

【共用体】
定义共用体类型的一般形式为:
union 共用体类型名 {
    成员类型 共用体成员名1;
    成员类型 共用体成员名2;
    ...
    成员类型 共用体成员名n;
};

共用体的大小:共用体每一个成员分别占有自己的内存单元。共用体变量所占的内存长度等于最长的成员的长度。一个共用体变量不能同一时候存放多个成员的值。某一时刻仅仅能存放当中的一个成员的值,这就是最后赋予它的值。


【枚举类型】
常见的枚举类型声明形式:
enum 枚举类型名
{
    标识符[=整型常量];
    标识符[=整型常量];
    标识符[=整型常量];
}枚举变量;
范例:枚举变量的赋值。


#include <iostream>
using namespace std;
int main(int argc, int *argv[]) {
    enum Weekday {Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};
    int a = 2 , b = 1;
    Weekday day;
    day = (Weekday)a;
    cout << day << endl;
    day = (Weekday)(a-b);
    cout << day << endl;
    day = (Weekday)(Sunday+Wednesday);
    cout << day << endl;
    day = (Weekday)5;
    cout << day << endl;
    return 0;
}

输出结果为:
2
1
3
5
【自己定义数据类型】
typedef <原类型名> <新类型名>
例:
typedef in INTEGER;
INTEGER a, b;
相当于:
int a, b;

版权声明:本文博主原创文章,博客,未经同意不得转载。

posted @ 2015-09-28 09:16  lcchuguo  阅读(374)  评论(0编辑  收藏  举报