c++牛客网做题笔记(二)

数组在静态存储区创建,或者栈上创建,或者是堆上建。
2.
拷贝构造函数的第一个参数必须是一个对象的引用
3.
c语言本身并没有提供对字符串进行整体操作的运算符,在c语言中,2个字符串进行大小比较要用strcmp比较。
4.
引用相当于一个"指针常量",引用一旦初始化之后,便不能够更改,引用同时也不能为空。引用必须在创建的时候初始化。
5.
vector的erease函数,删除指定位置的元素时,返回值是一个迭代器,指向删除元素的下一个元素。
6.
逗号运算符返回值是最后表达式的值

a = 1+2,3+4,5+6;  //a的值为11

函数内部,若程序员没有为指针分配内存空间,则函数退出之后,其栈空间就不存在了。也就说说不能再函数中返回一个局部变量的地址。正确的做法是向函数传递数组的引用。
8.
sizeof返回值表示的含义如下:
数组:编译时候分配的数组空间大小
指针:存储该指针所用空间大小(一般为4,64位上为8)
类型:该类型所占空间大小
对象:对象实际占用空间大小
函数:函数返回类型所占空间大小,函数返回类型不能为空
9.
‘\’ \是转义字符, 故’’ 不是字符。 如‘\018’时候代表的是2个字符’\01’与‘8’。由于0代表8进制,故8在这里是一个新的字符。‘\017’代表一个字符。
10.
C源程序中凡是行首以#标志的控制行都是预处理命令,预处理命令末尾不加分号。预处理包含 1 宏定义指令 2 条件编译指令 3 头文件包含指令 4 编译程序可以识别的特殊符号。预编译是对源文件中部分内容进行替换
11.
编译器在需要构造函数的时候而没有显示定义构造函数时候,便自动创建一个默认构造函数。
12.
设置虚基类的目的是为了消除二义性
13.
当一个常量字符串被多次使用的时候,如果有2个指针都指向同一个常量字符串,编译器并不愿意多分配出额外内存来存放多个abc.

char *a = "abc";
char *b = "abc";  //a,b的地址有可能一样 

数组名永远不可能是一个指针,只不过函数传递数组名的时候会退化成指针。
数组只能初始化赋初值,而不能对数组赋值,只能对数组中的成员赋值
15.
c++中按位取反的符号为 ~。对于任意整形n按位取反公式为: ~n = -(n +1);

int main()
{
int i = 2, j; //i = 00000010 00000000 00000000 00000000
j = ~i; // j = 11111101 11111111 11111111 11111111 (补码) 
printf("%d\n",j);  //输出结果为-3
}

指针函数和函数指针是有区别的。指针函数就是指函数返回值为某一种类型的指针的函数。指针函数的本质是一个函数,而函数指针的本质是一个指针。
17.c++中的异或运算符为 ^.
18.线程安全问题
1.局部变量局部使用时安全的
2 全局变量在多线程中读写是不安全的
3 函数静态变量在多线程读写也是不安全的
标准库里面的string在多线程下并不保证都是安全的,只提供2种安全机制:
多个线程同时读取的数据都是安全的
只有一个线程在写数据时候是安全的
19.
STL中vector在增加成员时可能引起原有成员存储位置发生改变
20.
a+模式表示文件打开并用于更新,并且流既允许读也允许写。文件各种打开mode应该熟记,现下见一个记一个
21.

void func(char str[2]) {};
void func(char str[200]){};
void func(char str[]){};
void func(char *str){};

其中每个函数的效果都是一样的,函数参数是一个char* 地址。
22.
内联函数在编译的时候要做参数类型检查。
23.

short i= 32769;
printf("%d\n",i);  //输出结果为-32767

前自加和后自加的区别(++i, i++):
i++返回的是一个临时变量
++i返回时的是i的值。
25.
各类型能表示的最大数为:
参照cLimit头文件
26.
绝不要重新定义缺省继承而来的缺省参数。 参考effective c++ 条款37
27.
单精度float与双精度double中阶码表示能表示的范围大小,而尾数则表示精度。float阶码分别为8位,表示的大小为2-128到128,尾数为23位,则表示的数字进度为2(23+1),亦即十进制的7位。
29
对数组名取地址是取整个数组的地址

int main(int argc, char* argv[]) 
{
int a[4][3] = {{1,2,2},{3,4,5},{6,7,8},{9,10,11}};
int *p = (int *)(&a+1);
int *p1 = (int *)(a+1);
cout<<*(p-1)<<endl<<*p1<<endl;  //输出为11  3
}

静态数据在类内声明,类外定义,初始化。但是静态常量数据成员时可以再类体内进行声明初始化的。

static const int a = 12;

关于静态函数:
对象不能调用静态数据函数,只能用类名加::来调用
不能使用this指针
只能访问类中的静态数据成员
另外,c++中是没有静态类的概念的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值