c中和java中数组的区别
对于原语类型的数组,如int[] a,在C里面只要这样定义之后就可以用a[i]使用了,但是在JAVA里面是不行的,必须用int[] a = new int[LENGTH];来为数组分配空间。这里的a更应该看成C里面的指针,它和C里面的int* a是一样的,因为这个a(C里面的)也要先malloc一个空间之后才可以用。
对于对象数组,则要“两次分配”,如:
Object[] obj = new Object[2];
obj[0] = new Object();
obj[1] = new Object();
因为数组首先是一个句柄,而这个句柄指向的2个空间里面又是存储着两个指向Object类型的句柄。
而C里面不完全相同:
struct Object{};
struct Object* obj = (struct Object *)malloc(2 * sizeof(struct Object));
其实他们的原理大至是相同的。只不过JAVA里数组的内存分配是在堆里面的,必须用new 来分配,而C里面是在栈里面分配的,定义的时候会自动分配。
在《Thinking in JAVA》中有更详细的介绍。
java在声明数组的时候不能加数量的.只能初始化的时候加
int[] a = new int[3]; 或
int a[] = new int[3]; 都行
c语言中,声明的时候加不加数量都可以
int a[3] = {1,2,3};
int a[] = {1,2,3};
相关文档:
网络搜集-资料
格式化输入输出函数
Turbo C2.0 标准库提供的两个控制台格式化输入、 输出函数:printf( ) 、scanf()。
printf()函数用来向标准输出设备(屏幕)写数据;
scanf() 函数用来从标准输入设备(键 ......
一、一个经过编译的C/C++的程序占用的内存分成以下几个部分:
1、栈区(stack):由编译器自动分配和释放 ,存放函数的参数值、局部变量的值等,甚至函数的调用过程都是用栈来完成。其操作方式类似于数据结构中的栈。
2、堆区(heap) :一般由程序员手动申请以及释放, 若程序员不释放,程序结束时可能由OS回收 ......
在使用C语言编写大型工程时要用到面向对象语言中的一些特性(内核中某些部分就应用了这些特性)。C语言是基于文件的类,static关键字声明私有数据成员,公有数据成员必须定义到头文件,或由其它文件使用extern关键字声明来使用。但后者引用关系不清晰。头文件就成了公有数据成员声明的地方。
头文件中应该包含以下及方面内 ......
C字符串长度定义规范
(转载请注明来源于金庆的专栏)
因为总是见到C字符串长度相关的错误, 所有定个规范出来, 有利于减少错误.
关键在于C字符串有个结尾0, 处理时需要注意.
定义字符串长度有两种方式, 一种是用字符串的大小, 一种是字符串的长度.
字符串的大小即内存空间的大小, 而串长度加1才是所需空间.   ......
定义:设a对b的乘法逆元是x则可以记为a*x=1 mod b,即a和x的积除以b的余数是1;
乘法逆元常用算法是欧几里德算法:
//算法求d关于模f的乘法逆元d-1 ,即 d* d-1 mod f = 1
1 。(X1,X2,X3) := (1,0,f); (Y1,Y2,Y3) := (0,1,d)
2。 if (Y3=0) then return d-1 = null //无逆元
......