c语言-数组学习总结(3)

指针与数组

数组名:数组名表示数组的首元素首地址,因此作右值可以直接赋值给指针。

如果有 int a[5];
则 a和&a[0]都表示数组首元素a[0]的首地址。(指向首元素)
而&a则表示数组的首地址。(指向整个数组)

数组中几个关键符号(a、a[0]、&a、&a[0])的理解

结合左值右值去理解(前提是 int a[10])
(1)a不能做左值(因为数组在初始化之后就不能进行整体操作了),做右值表示首元素的首地址等同于&a[0]
(2)a[0]做左值时表示数组第0个元素对应的内存空间;做右值时表示数组第0个元素的值
(3)&a不能做左值;&a做右值时表示整个数组的首地址。
(4)&a[0]不能做左值,做右值时表示首元素的首地址等同于a。

数组与指针的关系

dates+2==&date[2]; //相同的地址
*(dates+2)==dates[2]; //相同的值

以上表明可以的使用指针标识数组的元素和获得元素的值。
定义ar[n]的意思是*(ar+n),可以认为*(ar+n)的意思是“到内存的ar位置,然后移动n个单元,检索存储在那里的值”。

==另外,还要区别*(dates+2)和*dates+

*( dates+2)       //dates的第三个元素的值。
*dates+2          //dates的第一个元素的值加2,相当于(*dates)+2。

函数、数组和指针

  • 关于int ar[]和int *ar
    只有在函数原型或函数定义头中,才可以用int ar[]代替int *ar。
    int *ar和int ar[]都是表示ar是一个指向int 的指针。但 int ar[]只能用于声明形式参数。
  • 声明数组形参
    以下四种原型等价
	int sun(int *ar,int n);
    int sun(int *,int n);
    int sun(int ar[],int n);
    int sun(int [],int n); 

但是在函数定义中不能省参数名,下面两种形式等价:

int sum(int *ar,int n)
{
	……
}
int sum(int ar[]int n)
{
	……
}

指针操作

  • 赋值:可以把地址赋给指针。如用数组名、带地址运算符(&)的变量名、另一个指针进行赋值。
  • 解引用:*(地址)——给出指针指向地址上存储的值。
  • 指针与整数相加:ar+4=&ar[4]
    注:千万不要解引用未初始化的指针!!!
    如:
    int * pt;   //未初始化的指针
    *pt=5;    //严重的错误

原因:pt未被初始化,5不知道将被存储在何处。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值