static等为兼容c输出字符变量地址时候,改成输出从这个 内在单元开始 存放的一系列字符 ,到向后遇到 的第一个'/0'为止strutct Student{ };name.size();//字符串长度strlen(name);//容量c c++strcpy name=字符串strcat name+=字符串strcmp s1==s2 s1>s2string name;name.c_str() //c++风格的字符串转为c风格的字符串指针用来保存地址的变量数组名是 第一个元素的地址保存A类型变量地址的指针,称为“A指针”A类型变量的地址,简称为“A地址”
任何变量都有对应的指针类型指针在使用前必须初始化指针的类型决定了指针所参与的运算指针只能进行加减法运算数组中a+i 相当于 &a[i]*(a+i) 相当于 *&a[i]c++ 数组越界不严格java 数组越界严格c++里有sizeof,java里没有结构是一种数据类型结构类型也有指针 Date* p; (*p).year 简写成 p->yearint* p = NULL; //空指针int* q = new int;int* q = new int[5];delete[] q //表示释放数组q的内存,q没变,只是q指向的内存空间被释放了p = NULL; //还原指针,NULL就相当于0栈在底 堆在上
0:38 2011-1-16精通c++ core,能进行vc++的基本开发0相当于NULL(注意区分大小写)指针4个字节
在定义时初始化const int* p = &n; //const修饰int,整型常量 就近原则,指向常量的指针 int* const p .. //指针指向一个固定的地址,常指针
int* a[5] 指针数组,5个地址 int* a[5] = {} 5个空指针 (a[0]=new int;a[1]=new int[3];..)
void *p = NULL; //表示指向不确定, int n = 100; p = &n; cout << *(int*)p << endl;
16:19 2011-1-16int main(int argc,char* argv[]){} //argc表示参数的个数//argv[0] 相当于a.out(可执行文件的名字),argv[1]..表示之后所跟的参数cout << "你的可执行命令名为" << argv[0] << endl; cout << "你带了" << argc-1 << "个参数" << endl; for(int i=1; i<argc; i++) { cout << argv[i] <<endl; }
atof(字符串) //转为atoi(字符串) //转为整数 "123"man atof //linux查询
引用,本质上是一个聪明的指针int n = 100;int m = n; //复制其int& rn = n ; //起别名,不用复制变量的类型终生不变,地址同样是终生不变,别名也不变(引用)也就是说,c++里的引用不可变,但java里的引用可以随时改变,c++里的指针相当于java里的引用,可以改变
指针变量 p开头引用 r开头c++中提倡用引用,不用指针
void inc(int& m){ ++m; //会修改传来的m参数的值,引用}void intc(int m){ ++m; //不会修改传来的参数的值,不是引用,只会复制一个变量,产生另一个局部变量}
const int& r //常量引用,接受常量初始化,禁止修改这个引用尽量用引用来传递参数,至少不会复制一份数据尽量用const来限制对引用的修改
内存结构 代码区(存放程序的指令) 数据区(存放全局变量和静态变量) 常量区(存放字面量) 堆(new ) 栈(p )
函数指针函数的地址往往用函数名来表示 函数指针的类型也要求一致
void output(int a[], int n);void main(){ void (*fp)(int a[], int n) = NULL; int x[5]; fp = output; fp(x, 5);}
memset(a, 0, sizeof(int)*n)相当于for(int i=0;i<n; i++) a[i]=0;
引用没有const, 指针有const,const的指针不可变引用不能为空,指针可以为空sizeof引用 得到的是所指向的变量(对象)的大小,而sizeof指针 得到的是指针本身的大小指针和引用的自增(++)运算意义不一样
<< flush
刷新缓冲区