c/c++学习笔记
来源:互联网 发布:matlab约束粒子群算法 编辑:程序博客网 时间:2024/04/30 13:27
1. 在c/c++中,指针非常灵活,但也非常容易出错, 如果再跟数组联系起来,出错的可能性更大。
例如:
int *p[10]; 这是指针数组,有p[0] ~ p[9] 10个指针,所以sizeof(p) = 40。
int (*p)[10]; 这是指向数组的指针,sizeof(p) = 4。
例如:
int (*p)[10]; //one pointer which points to an array
int b[][10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
p = b;
此时,除了p是一个变量,b是地址常量的区别外,p跟b的用法是一样的。
2. 另外一个容易让人犯错的就是const指针和指向const对象的指针。
const指针(在g++编译器下,需要对const指针初始化)
例如: int a = 0; int b = 9;int *const p = &a;
初始化后,const指针就不能指向其它地址,任何对它的重新赋值都会编译不过的,如: p = &b; //compile error
指向const对象的指针
例如: int a = 0; int b = 9;int const *p;
指向const对象的指针可以不初始化, 也可以对它多次赋值。但一旦它指向某个对象后,任何通过这个指针来改变对象值都是徒劳的。即如果 p = &a, 那么*(p) = 1; //compile error
两个组合起来就是指向const对象的const指针
const int a = 0; const int const *p = &a;
3. 指针跟引用很相象,但其实差别还是挺大的。(注意:引用是c++才引进来的一个概念,标准c里面没有)
简单地说,引用必须初始化,且初始化后,不能再指向其它的对象。
下面这两种情况必须使用引用。(为什么?)
(1)流操作符<<和>>、赋值操作符=的返回值
(2)拷贝构造函数的参数、赋值操作符=的参数
4. static关键字
对于面向过程的c语言来说,static主要是用来修饰变量,当然也可以修饰函数。
(1) 在函数体内,用static修饰的变量,在函数调用过程中,值保持不变,也就是说,它存放在静态数据区中,生存周期 跟全局变量一样。
(2) 在函数体外,用static修饰的全局变量,限定了它的作用域,使之不能扩展,也就是说在工程内,只有本文件可见,在工程内其它文件用extern调用是不行的。
(3)修饰函数,static函数只能在本文件调用,跟extern相对应。
对于面向对象的c++来说,static关键字还有另外一个作用。那就是作为类的静态数据成员,它为类的所有对象所共享。
例如:
int *p[10]; 这是指针数组,有p[0] ~ p[9] 10个指针,所以sizeof(p) = 40。
int (*p)[10]; 这是指向数组的指针,sizeof(p) = 4。
例如:
int (*p)[10]; //one pointer which points to an array
int b[][10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
p = b;
此时,除了p是一个变量,b是地址常量的区别外,p跟b的用法是一样的。
2. 另外一个容易让人犯错的就是const指针和指向const对象的指针。
const指针(在g++编译器下,需要对const指针初始化)
例如: int a = 0; int b = 9;int *const p = &a;
初始化后,const指针就不能指向其它地址,任何对它的重新赋值都会编译不过的,如: p = &b; //compile error
指向const对象的指针
例如: int a = 0; int b = 9;int const *p;
指向const对象的指针可以不初始化, 也可以对它多次赋值。但一旦它指向某个对象后,任何通过这个指针来改变对象值都是徒劳的。即如果 p = &a, 那么*(p) = 1; //compile error
两个组合起来就是指向const对象的const指针
const int a = 0; const int const *p = &a;
3. 指针跟引用很相象,但其实差别还是挺大的。(注意:引用是c++才引进来的一个概念,标准c里面没有)
简单地说,引用必须初始化,且初始化后,不能再指向其它的对象。
下面这两种情况必须使用引用。(为什么?)
(1)流操作符<<和>>、赋值操作符=的返回值
(2)拷贝构造函数的参数、赋值操作符=的参数
4. static关键字
对于面向过程的c语言来说,static主要是用来修饰变量,当然也可以修饰函数。
(1) 在函数体内,用static修饰的变量,在函数调用过程中,值保持不变,也就是说,它存放在静态数据区中,生存周期 跟全局变量一样。
(2) 在函数体外,用static修饰的全局变量,限定了它的作用域,使之不能扩展,也就是说在工程内,只有本文件可见,在工程内其它文件用extern调用是不行的。
(3)修饰函数,static函数只能在本文件调用,跟extern相对应。
对于面向对象的c++来说,static关键字还有另外一个作用。那就是作为类的静态数据成员,它为类的所有对象所共享。
- C++/C学习笔记
- 【C/C++】STL学习笔记
- C/C学习笔记/导言
- C/C学习笔记/结构
- 【c/c++】学习笔记1
- C学习笔记1
- TPC-C学习笔记
- c语言学习笔记
- C语言学习笔记
- C语言学习笔记
- 学习笔记之c
- C#-学习笔记
- Objective-C学习笔记
- C++PRIMER学习笔记
- C学习笔记
- C 学习笔记
- C/C++学习笔记
- 1.C学习笔记
- 购物车JSP代码
- 飞花摘叶还是重剑无锋
- 非递归遍历树
- 帅哥是这样形成的
- List-C++数组
- c/c++学习笔记
- 纯技术角度看自动化测试的迷思
- 测试用例的标准
- 修复被破坏了的linux文件系统分区表
- List C++链式线性表
- 测试缺陷分析务实篇
- 函数WSAStartup
- c++学习笔记2——指向字符串的指针数组?
- ~QQ新版对对碰游戏外挂的制作方法~