C/C++知识点笔记
sizeof 如果是类型必须加括号,如果是变量名可以不加括号,返回size_t类型,
sizeof("\0")=2
strlen从内存某个位置扫描直到碰到字符串结束符\0为止,只能用char*做参数
strlen(("\0")=0
用数组名做参数时,sizeof不退化,传递给strlen就退化为指针了
char a[10]
sizeof(a)=10
strlen(a)=1
sizeof在编译期间运算,关心分配的空间大小。 strlen在运行期计算,关心存储的字符数据内容的长度
char str[20]="0123456789"
sizeof(str)=20
strlen(str)=10
小结:1.使用方法的区别;2.长度计数规则区别;3.数组名作参数的退化区别;4.一个是编译期间一个是运行期间的区别。
指针的引用 *&
指针的引用,相当于传递的是指针的指针,这样指针的数值是可以改变的
单传递指针,不传递指针的引用,那么指针指向的数据是可以改变,而指针本身是不可以改变的
1
2
3
4
5
6
7
8
9
10
11
12
13
|
fun( int * pA); // pA的数值在函数返回后不会变化 fun( int *& pA); // pA的数值在函数返回可能会发生变化,如果fun函数内部对pA赋值的话 void InitStack(LNode* & HS) { HS = NULL; // 函数返回后, HS就是NULL了 } void InitStack(LNode* HS) { HS = NULL; // 函数返回后, HS依然是传递进来的数值 } */ |
简单讲,*&指针本身可变; *指针本身不变,仅指向的内容可变。
全局变量和extern详解
http://my.oschina.net/hnuweiwei/blog/291037
声明与定义
声明不等于定义,声明只是指出了变量的名字,并没有为其分配存储空间;
定义指出变量名字同时为变量分配存储空间,定义包含了声明
extern int i; //声明变量i,但没分配存储空间,还不能使用, 可以出现很多次,下面的三种情况只能出现一次
int i; //定义了变量i,并分配了空间,可以使用
extern int a =0 //定义一个全局变量a 并给初值
int a =0;//定义一个全局变量a,并给初值
注意:在程序中一个变量可以声明多次,但只能定义一次。
在函数内部定义的变量称为局部变量,它的作用域是从定义处到函数结束;
在函数外部定义的称为全局变量,它的作用域是从定义处直到文件结束。
不管是全局变量还是局部变量,作用域都是从定义处开始的
extern
extern是用来声明全局变量的
要想使用其他文件的一个全局变量,就必须定义extern type variablename,然后才能使用
如果const变量想被其他文件使用,在定义的前面需要添加extern
extern
const
int
temp4=400;
//const默认是局部变量,即使是在全局中申明也一样,且在定义时,必须赋予初值。若想在外部引用,必须加extern