您的位置:首页 > 其它

听翁恺老师mooc笔记(5)--指针与数组

2017-03-02 15:58 274 查看
  如果我们通过函数的参数将一个数组传递到参数中去,那么在函数里接收到的是什么东西呢?我们知道如果传递一个普通变量,那么参数接收到的是值,如果传递一个指针变量,参数接收到的也是值,只不过这时的值是地址。那么数组是什么?将数组作为值传给一个函数,在函数的参数里有一个数组变量来接收这个数组,看下到底接收到数组变量的什么东西呢?以minmax作为例子来测试下:

  在minmax函数中能不能计算出数组a的个数?在minmax和main中分别添加printf函数,从结果可以看出,在main里a的大小是68,而在minmax函数中数组a的大小为8,8是什么,在64位机器下,8刚好和一个指针的大小是一样的,和地址的大小是一样的。

1     int *p =&min;
2     printf("*p=%d\n",*p);
3     printf("p[0]=%d\n",p[0]);


View Code



  p[0]什么意思,就是我以为p所指的地方是个数组的话,p[0]是数组p的第一个元素。那么实际上我们并没有数组,有的是一个叫做min的变量,min里存放的是2,p指向min,那么*p是所指变量的值,p[0]是把p所指的地方当作是一块数组,现在它不是一个数组只是一个变量,你可以把它当作一个数组看,当作int min[1]来看,作为min[1]来看的话,它有效的数组是什么?min[0].当然对于普通的变量不可以这么写,但是对于指针变量就可以这么写了,也就是它所指的地方的第一个元素取出来作为p[0].

  同样的,*运算符我们知道是对指针做的,是取出指针所指的地方的值,也可以对数组做。如果有数组也可以说*a=25,我们试验下这件事情,结果是*a为1120,可见*a可读可写,总之可以当成指针用。



  数组变量是const指针,在之前讲数组时说到过,如果定义两个数组,int a[],int b[],使b=a是不可以的,数组之间是不能赋值的。那么传递时如果int *q=a,这个是可以的,一个不可以一个可以有什么区别那?实际上我们说的int b[]可以被看作int * const b,const意思是b是常量,不可以改变,它是这个数组就不可以是别的数组了,所以数组是一个常量指针,不可以赋值,不可以代表别的东西了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: