指针 数组 函数 傻傻分不清楚

在C语言中,数组和指针的关系非常密切,我们可以通过指针来实现数组下标能实现的任何功能,而且指针有时候执行速度更快!!

数组指针

int a[10];//这是一个由10个数组元素组成的集合,a[i]表示数组第i个元素。

int *p;//指向整型对象的指针
p=&a[0];//指针p指向数组a的第0个元素,p的值为数组a[0]的地址。
       //如果p指向数组a中的某个元素,p+1就是指向下一个元素,   p+i  就是指向某个元素之后第i个元素。
x=*p;//这个赋值语句是将a[0]的值复制到x中,*p是引用a[0]的内容。

数组名,首元素地址,指针??

p=&a[0];

此时的p的值是数组a的首元素地址,这条语句和

p=a;

等价的。
其实,数组名是一个地址,它代表数组首元素地址
(注意!当数组名作为函数参数传递时,实际传递给函数的是指向数组首元素的地址。函数接受的是一个原参数的拷贝。)
a+i 是a的首元素之后的i个元素的地址,等价于&a[i]和p+i
我们可以用 * (p+i)对数组元素的内容进行引用,
同样可以用 * (a+i)。

注意!!
指针是变量!数组名不是变量!可以给变量赋值,不能给数组名赋值!
声明一个数组的同时也分配了内存空间,用于容纳数组元素!
声明一个指针时,只给分配用于容纳这个指针本身的空间!

a=p;
a++;//都是不合法语句!

指针数组

int *ap[10];

这是一个元素个数为10的指针数组(数组元素全为指针的数组)。指针数组常适用于指向若干字符串,这样使字符串处理更加灵活方便。

多维数组

多维数组其实可以看做一维数组的一个特例。
int arr1[3]是一个以为数组,它在内存中的存储形式是:
| 0 | 0 | 0 |
int arr2[3][3]是二维数组,它在内存中的存储形式是:
|| 0 | 0 | 0 || 0 | 0 | 0 || 0 | 0 | 0 ||

此时arr2表示的是首元素地址,而二维数组的首元素是第一行的元素,arr2可以看成是一维数组,包含3个元素,每个元素中有10个元素。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值