- 博客(20)
- 资源 (1)
- 收藏
- 关注
原创 C语言结构体声明
这两个声明有什么不同? struct x1{}; typedef struct {}x2; 第一种形式声明了一个“结构标签”;第二种声明了一个“类型定义”。主要的区别在于第二种声明更显抽象一些---用户不必知道他是一个结构,且声明他的实例时也不需要使用关键字typedef x2 b; 但是使用标签的结构就必须用这样的形式进行定义。 struct x1 a; 同时也可以使
2014-07-02 16:52:10
2037
原创 C语言结构填充
为什么sizeof返回的值大于结构大小的期望值,是不是尾部有填充? 为了确保分配连续的结构数组时正确对齐,结构可能有这种尾部填充(也可能是内部填充)。即使结构不是数组的成员,尾部填充也会保持,以便sizeof能够总是返回一致的大小。 既然数组名可以用作数组的基地址,为什么对结构不能这样? 导致数组引用“退化”为指针的规则只适用于数组。这反映了他们在C语言中的“二级”状态。(类
2014-07-02 16:50:22
1410
原创 C语言类型定义
对于用户定义类型,typedef和#define有什么区别?一般来说,最好使用typedef,部分原因是他能正确处理指针类型。例如这些声明: typedef char *string_t; #define string_d char * string_t s1,s2; stirng_d s3,s4; s1,s2,s3都被定义成了char*,但s4却被定义
2014-07-02 16:49:03
694
原创 C语言数组和指针
我在一个文件定义了一个extern 数组,然后在另一个文件中使用 : file1.c: int array[]={1,2,3}; file2.c extern int array[]; 为什么在file2.c中,sizeof取不到array的大小? 未指定大小的extern数组是不完全类型。不能对他使用sizeof,因为sizeof在编译时发生作用,他不能获得定义在另
2014-07-02 16:46:41
382
原创 C语言声明
怎样定义和声明全局变量和函数最好。 首先,尽管一个全局变量或函数可以有多处声明但是定义却最多只允许出现一次,对于全局变量,定义是真正分配空间并赋初值的声明,对于函数,定义是提供函数体的声明。例如:这些是声明: extern int i; extern int f();而这些是定义:int i=1;int f(){ return 1;}(事实
2014-07-02 16:45:35
391
原创 C语言指针
声明一个指针并为他分配一些空间,但却不行,下面的代码有什么问题呢? char *p; *p=malloc(10); 你声明的指针是p,而不是*p,当操作指针本身时(例如当你对其赋值时,使之指向别处时),只需要使用指针的名字即可; p=malloc(10); 当操作指针所指向的内存时,才需要使用*作为间接操作符: *p=‘H’; 然而,如果像下边这样子局部变量
2014-07-02 16:45:28
503
原创 Java 泛型
泛型是使用一种称为类型消除的方法实现的。编译器使用泛型类型信息来编译代码,但是随后会消除它。因此,泛型信息在运行时是不可用的。这种方法可以使泛型向后兼容使用原始类型的遗留代码。 泛型存在于编译时。一旦编译确认泛型类型是安全的,就会将他转换为原始类型。例如,编译器会检查例子中的a代码里的泛型是否使用正确,然后就将他翻译成b中的使用的等价代码。a: ArrayList list=new Ar
2014-07-02 16:44:39
377
原创 指针和数组等价
在C语言中“指针和数组等价”到底是什么意思?在c语言中对数组和指针的困惑多数都来自这一句话。说数组和指针“等价”并不表示他们相同,甚至也不能互换。他的意思是说数组和指针的算法定义使得可以用指针方便地访问数组或者模拟数组。换言之,正如Wayne Throop指出的,“在C语言中只是指针算术和数组下标运算等价,指针和数组是不同的”。 特别的,等价的基础来自这个关键定义: 一个T数组类型
2014-07-02 16:43:14
2434
原创 最大公约数
两个数的最大公约数是能够整除这两个整数的最大数。程序清单给出了一个求两个整数m和n的最大公约数的穷举算法。该算法检测K(k=2,3,4,等等)是否是n1和n2的公约数。 public static int gcd(int m,int n) { int gcd=1; for(int k=2;k if(m%k==0&&n%k==0) gcd=k;
2014-07-02 16:40:39
324
原创 斐波那契数
import java.util.Scanner;public class ImportFibonacci{ public static void main(String[] args){ Scanner input=new Scanner(System.in); System.out.println(" enter an index for the Fibonacc
2014-07-02 16:40:39
341
原创 堆排序 JAVA
class Heap{ private java.util.ArrayListlist=new java.util.ArrayList(); public Heap(){} public Heap(E[] objects){ for(int i=0;i add(objects[i]); } public void add(E
2014-07-02 16:39:22
328
原创 快速排序 JAVA
public class QuickSort{ public static void quickSort(int[] list){ quickSort(list,0,list.length-1); } private static void quickSort(int []list,int first,int last){ if(last>fir
2014-07-02 16:37:31
297
原创 归并排序 JAVA
public class MergeSort{ public static void mergeSort(int [] list){ if(list.length>1){ int[] firstHalf=new int[list.length/2]; System.arraycopy(list,0,firstHalf,0,list.length/2); mergeS
2014-07-02 16:37:30
290
原创 JAVA 外部排序
import java.io.*;public class SortLargeFile{ public static final int MAX_ARRAY_SIZE=100000; public static final int BUFFER_SIZE=100000; public static void main(String[] args) throws
2014-07-02 16:36:45
804
原创 JAVA 算术运算
class GenericStack { private java.util.ArrayList list=new java.util.ArrayList(); public int getSize(){ return list.size(); } public E peek(){ return list.get(getSize()-1)
2014-07-02 16:34:43
429
原创 文件操作 C语言
我写了一个函数用来打开文件: myfopen(char *fiename,FILE *fp){ fp=fopen(filename,"r");}可我这样调用的时候: FILE *infp; mafopen("filename.dat",infp); infp指针并没有正确设置,为什么? c语言的函数总是接收参数的副本,因此函数永远不能通过向参数赋值“放
2014-07-02 16:32:22
619
原创 java十种排序
本文件讲了十种JAVA排序方法(冒泡(Bubble)排序——相邻交换、选择排序——每次最小/大排在相应的位置、插入排序——将下一个插入已排好的序列中、壳(Shell)排序——缩小增量 、归并排序、快速排序 、堆排序 、拓扑排序、锦标赛排序、基数排序)的使用,并提供了实例代码可参考排序算法有很多,所以在特定情景中使用哪一种算法很重要。为了选择合适的算法,可以按照建议的顺序考虑以下标准:(1)
2014-07-02 16:31:31
404
原创 随机数 C语言
怎样获得某一范围的随机整数?直接使用这种方法: rand()%N;(试图返回从0到N-1的整数)不好,因为许多随机数生成器的低位并不随机。 一个较好的方法是: (int)((double)rand()/((double)RAND_MAX+1)*N)两种方法都需要知道RAND_MAX,而且假设N要远远小于RAND_MAX。 如果N值接近RAND_MAX而随机数生成器
2014-07-02 16:29:06
492
原创 Linux 进程结构
可以看出,ELF格式可执行文件在存储时(没有调入内存)分为代码区(test),数据区(data)和为初始化数据区(bss)3个部分,各段基本内容如下: 代码段:存放CPU执行的机器指令。通常,代码区是可共享的,(即另外的执行程序可以调用它)使其可共享的目的是对于平凡被执行的程序,只需要有一份代码即可。代码通常是只读的,使其只读的原因是防止程序意外的修改了它的命令。因此,常量数
2014-07-02 16:27:32
376
原创 堆和栈的区别
堆是由编译器在程序运行时分配到的空间,由操作系统维护。堆是由malloc()函数(C++语言为new运算符)分配的内存块,内存的管理由程序员手动控制,在c语言中free()完成(C++中为delete运算符)。栈和堆的主要区别分为一下几点:1.管理方式不同 程序在运行时栈由操作系统自动管理,无需程序员手动控制;而堆空间的申请,释放工作由程序员控制,容易产生内存泄漏。2.空间大小不同
2014-07-02 16:23:33
325
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人