黑马程序员-说说C#中的指针(1)

------- 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语言中的指针数组有异曲同工之妙。(未完待续)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值