------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
java和c#都可以称之为“不能使用指针的安全语言”,
实际上真的没有指针吗,答案是否定的,只要有内存操作,就必然要用到指针,没有指针,程序员如何构造出链表和树这样的数据结构?
我们先来看一个简单的例子:
static void Main(string[] args)
{
int[] array = new int[3] { 2, 9, 8 };
func(array);
Console.WriteLine(array[2]);
}
static void func(int[] array)
{
array[2] = 3;
}
猜一猜最后输出的值是多少?是3,数组是聚合量,把一个数组传进函数时会传递它的指针,指针指向的内容变了,最后的结果也变了。而array[i]其实是*(array+i)的语法糖
为了使得函数能有多个返回值,C程序员喜爱这样的写法:
func(int *a,int *b){
*a=...
*b=...
}
这种方法被称之为:通过参数返回值
C#中的new运算符和C中的malloc类似,但又不一样,malloc返回一块内存的首地址,而new运算符则根据情况不同有不同的重载:
int i=new int();
int[] array=new int[3];
这两种声明中的new就不一样,声明整形变量时的new仅仅是简单的给变量一个0值,而数组就涉及到一些call,这些call可能和内存分配有关
在C语言中,声明一个指针数组可以这样写:
int *array[3];//声明元素为三个整形指针的数组
在C#中,有一种数组叫做交错数组:
int[][] array = new int[3][];
array[0] = new int[5];
aray[1]= new int[5];
这种声明方法,怎么看都和C语言中的指针数组有异曲同工之妙。(未完待续)