c++知识点总结
来源:互联网 发布:淘宝上怎么卖话费充值 编辑:程序博客网 时间:2024/06/14 04:33
using namespace std
所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。
std::cout<<std::hex<<3.4<<std::endl;
cout << hex << 3.4 << endl;
#include<iostream>
#include<sstream>
#include<string>
using
namespace
std;
cout << hex << 3.4 << endl;
输入和输出
#include <iostream><span style="white-space:pre"></span><span class="s1" style="font-family: Arial, Helvetica, sans-serif;">//</span><span class="s2" style="font-family: Arial, Helvetica, sans-serif;">预处理命令</span><span style="white-space:pre"></span>using namespace std; //使用命名空间stdint main(int argc, const char * argv[]) { //程序主函数 // insert code here... int a,b,sum; cin >> a >> b; //输入,>>为提取运算符,从输入设备中提取数据送到输入流cin中 sum = a+b; cout<<a<<"+"<<b<<"="<<sum<<endl; //输出,<<插入运算符,将数据插入到输出流(输出队列cout)中,endl作用为换行即"\n" return 0; //程序结束,向操作系统返回0}
c语言的输入和输出
为了兼容,c++保留了c语言的这一用法,必须指定数据的类型和格式
int a;float b;char c; scanf("%d %f %c",&a,&b,&c);//输入,注意在变量名前要加地址运算符& printf("a = %d,b=%f,c=%c\n",a,b,c);//输出
运算符的优先级
逻辑运算符包括:&&逻辑与,||逻辑或,!逻辑非
高低排序为:! > 算数运算符(+,-,*,/) > 关系运算符(<,>=,==,!=) > &&和|| > 赋值运算符(=)
数值范围
c++没有统一规定各类数据的精度,数值范围和内存中所占的字节数。以下为visual c++数值型和字节型数据。
转义字符
字符串与字符
“a”和'a'所代表的含义是不同的,“a”是字符串常量,‘a’是字符常量,前者占两个字节,后者站一个字节。char类型的数据只能存放‘a’。
一个字符串的结束标志为 ‘ \0 ’,‘\0’代表ASCII码为0的字符。
用一个字符数组可以存放一个字符串的字符。例如:char str[10] = "china"
字符串的初始化方式
字符数组存放字符串: char str[30] = "abcde";
字符串变量存放字符串:string str = "abcde";
字符指针指向字符串:char *str = "abcde";//把字符串第一个元素的地址赋给str
字符串处理相关的常见函数
字符串连接函数strcat
char *strcat(char[ ], const char [ ]);
将两个字符数组中的字符连接到前面字符数组的字符串后面。第二个字符数组被指定为const,以保证该数组的内容不会在函数调用期间修改。
<span style="font-size:14px;"> char str1[30] = "I am a "; char str2[30] = "superman"; cout << strcat(str1, str2);</span>
字符串复制函数 strcpy
char *strcpy(char[ ], const char [ ]);
字符串比较函数 strcmp
char *strcmp(char[ ], const char [ ]);
相等时返回0;1大于2时返回正整数;1小于2时返回负整数
字符串长度函数 strlen
char *strlen(const char[ ]);
指针
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。一个变量的地址称为该变量的指针。
运算符&和*
&是取地址运算符,*是...书上叫做“间接运算符”,表示指向。&a的运算结果是一个指针,指针的类型是a的类型加个*,指针所指向的类型是a的类型,指针所指向的地址嘛,那就是a的地址。
*p的结果是p所指向的东西,这个东西有这些特点:它的类型是p指向的类型,它所占用的地址是p所指向的地址。
int a=12; int b; int *p; int **ptr; p=&a;//&a的结果是一个指针,类型是int*,指向的类型是int,指向的地址是a的地址。 *p=24;//*p的结果,在这里它的类型是int,它所占用的地址是p所指向的地址,显然,*p就是变量a。ptr=&p;//&p的结果是个指针,该指针的类型是p的类型加个*,在这里是int**。该指针所指向的类型是p的类型,这里是int*。该指针所指向的地址就是指针p自己的地址。 *ptr=&b;//*ptr是个指针,&b的结果也是个指针,且这两个指针的类型和所指向的类型是一样的,所以?amp;b来给*ptr赋值就是毫无问题的了。**ptr=34;//*ptr的结果是ptr所指向的东西,在这里是一个指针,对这个指针再做一次*运算,结果就是一个int类型的变量。
打印指针和地址
int a,b; int *point_a, *point_b; a = 100; b = 10; point_a = &a; point_b = &b; cout << * point_a << "和" << * point_a << "为:" << point_a << "和" << point_a << endl;打印结果为:
100和100为:0x7fff5fbff78c和0x7fff5fbff78c
指向指针的指针
int * * ppi; //
这是一个指向指针的指针,注意有两个
*
号
int * * ipp; //这是一个指向指针的指针,注意有两个*号
int
i = 5, j = 6, k = 7;
int
*ip1 = &i, *ip2 = &j;
现在我们可以这么写:
int
**ipp = &ip1;
那么现在指针 ipp 指向了 ip1,ip1 指向了 i。*ipp 就是 ip1,**ipp 就是 i,或者说是 5。我们可以用我们熟悉的盒子箭头图来描述,像这样:
int i = 5, j = 6, k = 7; int *ip1 = &i, *ip2 = &j; int **ipp = &ip1; cout << ipp << endl; //指针的地址 cout << *ipp << endl; //指针指向的地址,即指针的内容 cout << **ipp << endl; //指针指向的内容,即地址所在的内容结果为:
0x7fff5fbff758
0x7fff5fbff76c
5
如果我们接着这么写:
*ipp = ip2;
我们就改变了 ipp 指向的那个指针(也就是 ip1),现在它指向 ip2 所指的地方。也就是说(ip1)现在它指向了 j:
我的疑问是:为什么在第二幅图里,ipp 还是指向 ip1 而不是 ip2?
最佳答案:
让我们暂时忘掉那些关于指针的各种类比。指针实际上存放的是内存的地址。
& 符号的意思是取地址,也就是返回一个对象在内存中的地址。
* 符号的意思是取得一个指针所指向的对象。 也就是如果一个指针保存着一个内存地址,那么它就返回在那个地址的对象。
所以当你这么写时 *ipp = ip2,实际上是把 ipp 存的地址所对应的对象,也就是 ip1 取到,然后把 ip2 存的值赋值给 ip1,也就是 j 的地址。
简单点就是:
&:取址。
* :取值。
char * * p; char *name[] = {"java","OC","swift","c++"}; //数组默认指向第一个数据 p = name+2; //修改p的指向为第三个数据 cout << p << endl; //数组所指向内容的地址 cout << *p << endl; //数组所指向的内容 cout << **p << endl;//数组所指向内容的首个字符结果为:
0x7fff5fbff790
swift
s
const限定符
const int bufSize = 512;
定义 bufSize 为常量并初始化为 512。变量 bufSize 仍然是一个左值,但是现在这个左值是不可修改的。任何修改 bufSize 的尝试都会导致编译错误:
bufSize = 0; // error: attempt to write to const object因为常量在定义后就不能被修改,所以定义时必须初始化:
85
const std::string hi = "hello!"; // ok: initialized const int i, j = 0; // error: i is uninitialized const
与其他变量不同,除非特别说明,在全局作用域声明的 const 变量是定义该对象的文件的局部变量。此变量只存在于那个文件中,不能被其他文件访问。
通过指定 const 变更为 extern,就可以在整个程序中访问 const 对象:
// file_1.cc
// defines and initializes a const that is accessible to other filesextern const int bufSize = fcn();
// file_2.cc
extern const int bufSize; // uses bufSize from file_1
// uses bufSize defined in file_1
for (int index = 0; index != bufSize; ++index)
// ...
- C语言知识点总结
- C语言知识点总结
- C/C++ 知识点总结
- C语言知识点总结
- C语言知识点总结
- c知识点总结
- C语言知识点总结
- c知识点总结
- C语言知识点总结
- Objective-C 知识点总结
- C/C++ 知识点总结
- C语言知识点总结
- c语言知识点总结
- Objective-C知识点总结
- C语言知识点总结
- c知识点总结大全
- C语言知识点总结
- 【c++】c++知识点总结
- Platform Builder 6.0 180天试用过期
- Java Arraylist知识
- QML之ColorAnimation颜色动画
- wampservice自定义首页
- Qt中如何使用Sleep函数
- c++知识点总结
- linux下samba的安装过程
- 互斥锁与自旋锁
- win2003建立NTP时间服务器
- android如何让控件摆放在屏幕底部
- 使用Alcatraz来管理Xcode插件
- JavaBean规范
- [bzoj]1227: [SDOI2009]虔诚的墓主人【树状数组】
- 页面静态化 Freemarker