详解指针与数组

前言

有时我们在编程序的时候,在某种情况下,操作指针和数组时,会让人感到它们是一样的,即使,它们可以互换使用。下面咱们一块来来总结一下指针与数组的相同点和不同点。

int main()
{
  int a[]={1,2,3,4,5,6};
  int *p =a;
  //通过数组名打印数组变量
  int i=0;
  for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
  {
    printf("%d ",a[i]);
  }
  //通过指针来访问
  for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
  {
    printf("%d ",p[i]);
  }
  return 0;
}

概念区别

指针数组
保存数据地址保存数据
间接访问数据,首先取得指针的内容,把它作为地址,然后从这个地址提取数据。如果指针有一个下表[I],就是把指针内容加1作为地址,从中提取数据直接访问数据,a[I]只是简单地以a-I作为地址取得数据
通常用于动态数据结构通常用于存储固定数目且数据类型相同的元素
相关函数malloc() ,free()隐式分配和删除
通常指向匿名数据自身即为数据名

指针与数组什么时候相同

1、表达式中的数组名(与声明不同)被编译器当作一个指向该数组第一个元素的指针。

2、下标总是与指针的偏移量相同。

3、在函数参数的声明中,数组名被编译器当作指向该数组第一个元素的指针。

本人参考的是《C专家编程》这本书,原理性地探讨C语言中的知识。

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值