1,"a" + "b" + 3 strcat
double d = 3
object obj = dint i = (int)obj --异常测试下装箱拆箱的时间,似乎很慢拆装箱的本质??看IL代码 "abbcd"是个引用?s = "a" 有装箱吗?s + "b" 有装箱吗?where T :struct
where R :classwhere V : ICompareablewhere w : CAnimalwhere x : class, new()new必须是最后一个 IEnumerator实现枚举显式实现
继承两个接口,中有同名方法类型推断hashtable dirtionaryyield方式的
IEnumeratorIEnumerableIEnumerator<T>泛型实现 ?------------------------------
索引器重载: 多维数组,string类型索引可为空类型,object ?什么叫类型安全?
委托接收实例的方法: dfun = obj.func
多播委托的加减顺序?委托列表为空时可以继续减,但调用异常线程t1调用t2.abort终止t2
t2在自己的线程中使用异常捕获,并输出t1传过来的信息当前路径用 . 表示
GetType 可以用类名调用 ?
GetType("System.string") ?---------------------
用UDP 做聊天室一个电脑可能有多个IPUDP:收数据需要绑定IP和端口,只发送数据不需要绑定IP和端口字符串转成字节数组后
字节数组如何转字符串byte[] data
tcp.Receive(data)这个数组应该多大?底层数据包粘包后最大多大?UDP的双端通讯可以使用TCP同样的思路
发送端自己不需要指定I自己的IP和端口而只指定要连接的服务器的IP和端口服务端接收连接后(TCP)对UDP而言就是服务器REVICE后,会有一个IPENDPOINT返回,这就是客户端的IP和端口,利用这个就可以与客户端通讯c++线程
----------------------
unsigned int i = 0int j = 1i - 1 ?-2147483648 < 2147483647 ? false
int i = -2147483648i <2147483648 ? true-2147483648 - 1 < 2147483648 ?
sum(int a[], unsigned len){
int i, sum = 0; for(i=0; i<=len-1; i++) sum += a[i]; return sum;}a[10] = {0};sum(a, 0) ;int x = 65536
int y = x * x;x> y 等价于 -x < -y ?
x = -2147483648时不成立main.c
int d= 100; int x = 200; int main(){ p1(); printf("d=%d, x]%d\n", d, x) return 0;}p1.c
double d;void p1(){ d = 1.0;}打印结果:
d=0, x=1072693248 ?int copy_array(int* array, int coutn){
int i; int *myarray = (int*)malloc(count*sizeof(int)) if(myarray == null) return -1; for(int i=0; i<count; i++) myarray[i] = array[i]}
int a = 0x80000000int b = a/-1;printf("%d\n", b);int a = 0x80000000
int b = -1;int c = a/b;printf("%d\n", c);除法错异常? 溢出main(){
double a = 10; printf("a = %d\n", a);}double func(int i){
volatile double d[1] = {3.14} volatile long int a[2]; a[i] = 1073741824; return d[0];}func(0)
func(1)func(2)func(3)func(4)二维数据间拷贝
行优先拷贝与列优先拷贝 double f(int x){ return 1.0/x;}void main(){ double a, b; int i; a = f(10); b = f(10); c = f(10); //试着去除这句看有什么不同 i = a == b; printf("%d\n", i);}int main(int argc, char*argv[]){
int a= 10; double *p=(double*)&a; printf("%f\n", *p) //0.000000 printf("%f\n", (double(a)));//10.000000 return 0;}new()的多重重载使用
new 与 new()的区别--------------------------x86 包含 i386 ,i386 仅仅是 x86 的一部分。x86 这里的 x 本来就是一个未知数性质的,他可以是 3、4、5、6、7 。x86 是 Intel 建立起来的 CPU 架构。他的 8086、8088、80286、80386、80486、Pentium 、Pentium Pro 、Pentium MMX ,Pentium 2 ,还有后面的 P3、P4 、PD 、Core 全系列,Xeon 的 x86 系列。以及 AMD 的 Intel 架构兼容全系列(楼主的 AMD 肯定也是啦,非 x86 架构如果楼主作为桌面计算机用上了,肯定不会来这里问这个问题了)。当然还有最近重新崛起的 VIA 的 C7 系列。他们都是 x86 架构。更多的 x86 代表的是 32 位的 Intel CPU 架构体系。但其中分成很多代。i386 就是 80386 的那代 CPU 的标准,主要是支持 32 位的保护模式和实模式两种工作环境。这个功能很好很强大,一直沿用至今,而且系统对于这个功能是必须支持的。386 之后的 cpu 是完全兼容 i386 体系的。i486 加入了新的一个功能,i586 (奔腾 1 代系列)又加入了新功能,i686 (奔腾 Pro 系列以后)又加入了新的功能体系。i386 的软件可以运行在 i686 系统,但是 i686 的软件不能运行在之前的架构上。旧 CPU 不能运行新软件主要是不能使用新的特性导致不能运行,但是旧的架构软件在新的架构上运行,仅仅是不能用新的功能体系,运行效率是没有减少的。而且这个功能架构主要是 Linux 内核在使用。所以楼主不要考虑 i386 和 x86 的关系。只要看到 i 什么 86 ,基本都能用。如果有 i686 ,楼主的 CPU 只要不是 K6 系列,而是 Athlon 系列,最好选择 i686 ,但如果只有 i386 的,楼主注意安装后看看你的内核是不是 i686 体系的,如果是,性能不受影响。题外:i786 是一个隐藏的新体系,听说只能用在 P4 以后的 Intel CPU 上面。但是很多软件没有针对这个架构编写,所以除非自己基于 i786 编译,不然网上没有 i786 的软件。这里还要说 x86_64 体系,这个是 AMD 提出并且最先使用的 x86 新的架构体系。他把 32 位的 i686 架构体系,扩展为 64 位。但是因为变动很大的原因,64 位的系统软件要兼容 32 位的软件,需要在内核里打开支持,并且安装 32 位的兼容库才行。其实如果你有源代码,32位系统的源代码基本上可以直接在 64 位的系统上面编译成为 64 位架构可运行的软件(新的技术还是用不上)。同样 64 位的 CPU 兼容上一代的 i686 架构,i686 CPU 不支持 x86_64 的软件。如果楼主的 AMD CPU 是 Athlon 64 及其以后的 cpu 可以装 x86_64 的系统玩玩,不过注意,很多 32 位特有的软件,而且没有源代码的要么不能用,要么需要 32 位兼容库,Flash 的浏览器插件就是一个例子。64位的 Firefox 需要 32 位兼容库才能借助 Flash 插件显示 Flash 动画。Adobe 没有放出 64 位的插件,也没有提供源代码。AMD 总是有新的点子,新的技术,却总是拼不过 Intel 的缓慢的技术革新。------------------
10000x3 与 3x10000的效率差别?UI适应分辨率
https://blog.csdn.net/wkhabc/article/details/52527202
智能指针 不能用于数组???智能指针的使用及reset注意事项??p1 = p2p1 = new(p2)p1.reset(p2)p1.reset() { A*p = new A() shared_ptr ptr(p); shared_ptr ptr2; ptr2.reset(p);}int ary[] = { 1, 2, 3, 4, 5}for(int& e:ary) e*=10; struct A{ int n; A(int i):n(i){}}vector st(ary, ary +5)//类型转换构造函数