最近一直在参加各种校招,可算现在闲下来了,又有时间学学习、看看书,继续写我的C++学习笔记。
#ifndef _STDBOOL_H_ #define _STDBOOL_H_ #define __bool_true_false_are_defined 1 #ifndef __cplusplus #define false 0 #define true 1 #define bool _Bool #if __STDC_VERSION__ < 199901L && __GNUC__ < 3 && !defined(__INTEL_COMPILER) typedef int _Bool; #endif #endif /** !__cplusplus */ #endif /** !_STDBOOL_H_ */c++中bool类型有几个特性:
#include <stdio.h> int main(int argc, char *argv[]) { int a; bool b = true; printf("b = %d, sizeof(b) = %d\n", b, sizeof(b)); b = 3; a = b; printf("a = %d, b = %d\n", a, b); b = -5; a = b; printf("a = %d, b = %d\n", a, b); a = 10; b = a; printf("a = %d, b = %d\n", a, b); b = 0; printf("b = %d\n", b); printf("Press enter to continue ..."); getchar(); return 0; }
Type& name = var;
2.引用的作用:引用作为变量的别名,在某些情况下可以替代指针,相对指针来说具有更好的可读性和实用性。
void swap(int& a,int& b) //使用引用作为函数参数,进行两个数交换 { int t = a; a = b; b = t; } swap(a,b);
void swap(int* a,int* b) //使用地址传递,进行两个数交换 { int t = *a; *a = *b; *b = t; } swap(&a,&b);可见两个程序,第二个容易被误会成为是a与b地址的交换,可读性不高。 切记:引用作为函数参数的时候不用进行初始化,当调用函数的时候才进行初始化。
int main() { char a = 10; const int& b = a; //const int& b = 9; printf("a %x\n",&a); printf("b %x\n",&b); return 0; }4.引用的实质:
#include <stdio.h> int& f() { static int a = 0; return a; } int& g() { int a = 0; return a; } int main() { int a = g(); int& b = g(); f() = 10; printf("a = %d\n", a); printf("b = %d\n", b); printf("f() = %d\n", f()); printf("Press enter to continue ..."); getchar(); return 0; }
#include <stdio.h> void fun(void) { printf("hello fun\n"); } int main(int argc, char *argv[]) { int a[10]={1,2,3,4,5}; int* p = a; printf("%d\n",p[2]); int* &d = p; //这里定义了一个数组的引用,即int*类型指针的引用 printf("%d\n",d[2]); //此时d就是p void (*q)(void) = fun; //这里定义了一个函数指针 void (* &m)(void) = q; //这里定义了一个void (* )(void)类型的函数指针的引用 m(); //q(); int qq = 12; int (*nl)[10] = &a; int (*na)[10] = (int (*)[10])qq; //这里要注意这个强制类型转换的方式 (int (*)[10])为一个整体类型 //要注意给一般引用初始化的时候 一定要是一个变量 而不能是一个常量或者只读变量或者类型不匹配的变量 这里&a是一个只读变量 所以应该用常引用 int (* const &n)[10] = &a;//注意a是变量 &a是只读变量 也可以像上面的方式一样 用一个指针过度下 int (* &pn2)[10] = (int (* &)[10])n;//同一个原理的强制类型转换 有const与没有const 完全是两个类型 int (* &pn)[10] = nl; //这里定义了一个int(* )[10]类型的数组指针的引用 int (* &pn1)[10] = pn; //因为 pn就是nl printf("%d\n",**n); //printf("%d\n",**pn); printf("Press enter to continue ..."); getchar(); return 0; }对于这段代码,有几个要注意的问题: