C/C++学习笔记

1. 全局int型变量,如果不赋值,出始为0;局部变量如不赋值,初始值不确定。

 

2. 非定义的函数声明也可以写在局部作用域中,例如:

int main(void)

{

void print_time(int, int);

print_time(23, 59);

return 0;

}

这样声明的标识符print_time具有局部作用域,只在main函数中是有效的函数名,出了main函数就不存在print_time这个标识符了

虽然在一个函数体中可以声明另一个函数,但不能定义另一个函数,C语言不允许嵌套定义函数

 

3. 一般的编译器不支持变量作为数组的长度,如以下语句会编译不过:

int arrLength = 10;

int myArray[arrLength];

但以下语句可以编译过:

const int arrLength = 10;

int myArray[arrLength];

原理: 函数内部的变量存放在stack中,而函数的stack必须预先确定大小,因此大多数编译器不允许用变量指定数组大小。而有的编译器,如g++支持“preceding declaration”,所以g++可以编译通过第一段代码。

那么,如何才能动态确定数组大小呢? 参照如下代码:

int* myArray;

int arrLength = 10;

myArray = new int[arrLength];

//一些数组操作

delete[] myArray; //最后别忘了清除heep中的数组存储空间

原理: new int[arrLength]是在heap中创建数组的存储空间,而在堆中,只创建了一个数组指针,后来又指向了占内存中的数组存储控件。实现了动态确定数组大小。

 

4. 传值、传指针、传引用、常量引用

//传值

void addOne(int i)

{

i++; // Has no real effect because this is a copy of the original

}

//传指针

void addOne(int* i)

{

         *i++; // Actually changes the original variable

}

//传引用

void addOne(int& i)

{

         i++; // Actually changes the original variable

}

//常量引用

void constRef(const int& i)

{

       //常量引用的作用: 对参数产生一个不可变更的引用(而不是拷贝)

        //Do something …

}

 

5. g++ 编译和连接

我写了三个文件:

student.h 声明了一个student类

student.cpp 定义了student类的实现

testStudent.cpp 包含主函数,创建并使用student类的对象

生成可执行程序的步骤:

1. 先编译成目标文件:

g++ –c *.cpp

目录中多了两个文件: student.o  testStudent.o

2. 对目标文件进行连接:

g++ *.o

 

6.  对象创建

1. 如果类有默认构造方法,那么 在声明变量时,对象会自动创建:

AClass aObj;

aObj.aMethod();

2. 如果类没有构造方法,那么在声明时,必须指定参数:

 

AClass aObj("xxx",123);

aObj.aMethod();

3. 也可以使用new关键字创建一个对象,new表达式的值是一个指向对象的指针:

AClass* aObj = new aObj();

aObj->aMethod();

4. 使用new和不用new的区别:

如果不用new,是在栈中分配内存空间, 随着函数的结束, 空间被释放

如果用new,是在堆中分配内存空间,函数结束后,空间不会被释放,除非使用delete关键字对变量进行回收

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值