指针与数组

指针
1、主调用函数分配的内存(堆、stack、全局区),可以在被调用函数里面使用(指针做函数参数),被调用函数分配的内存(malloc的内存、static、内存可以让主调用函数使用,但是临时区stack属性的内存不可以)
2、指针变量和它所执行的内存空间变量是两个不同的概念。

指针与数组
1C语言在表达式中把一个类型为T的数组的左值当作是指向该数组第一个元素的指针。
2、一个数组就是一个地址,一个指针就是一个地址的地址。
3、对数组的引用如a[i]在编译时总是被编译器改写成*(a+i)。
4、把传递给函数的数组参数转换为指针是出于效率的考虑。



指针与数组并不相同
     1 数组和指针在编译器处理时是不同的,在运行时的表示形式也是不一样的,并可能产生不同的代码。
多维数组
      当几个"[]"修饰符连续出现时,就是定义一个多维数组(其他语言称之为“数组的数组”)
    C语言里面只有一种别的语言称之为数组的数组的形式,但C语言称它为多维数组。



指针什么时候与数组相同
      1、所有作为函数参数的数组名总是可以通过编译器转换为指针   
    2、数组的声明就是数组,指针的声明就是指针,两者不能混淆
    3、在使用数组(在语句或表达式中引用)时,数组总是可以写成指针的形式,两者可以互换
    数组声明
               1、 外部数组的声明:extern,如extern char a[];不能改写成指针的形式
               2、 定义,char a[10];不能改写成指针的形式
               3、 函数的参数,如test(char a[]);可以随自己喜欢,选择数组形式或者指针形式      1、在特定的上下文环境中,也就是作为一个函数调用的参数使用2、数组实际是作为指针来传递的
    在表达式中使用
               1、数组名出现在一个表达式中时(与声明不同),它会被被转换成一个指向该数组第一个元素的指针。
               2、数组下标表达式总是可以改写成带偏移量的指针表达式。
               3、在表达式中,指针和数组是可以互换的,因为它们在编译器里的最终形式都是指针。
               4、在函数参数的声明中,数组名被编译器当作指向该数组第一个元素的指针。

指针与数组引用的汇编比较
代码:int a[2] = {10, 5}
          int *pa = a;




代码:void test(int a[])
{
     a[0] = 10;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值