数组与指针与多维数组

 首先,我们知道数组与指针是不一样的。从左值开始讲起。x=y。x在编译中就是一地址,y则是赋予这地址的内容。x是可知的,y是不可知的,y在运行时才会知道。

访问数组:

int a[100]:首先访问的是a的地址,也就是所谓的数组的起始地址,然后在起始地址加上i的值,获取地址,再取得地址中的内容。

访问指针:

int *a:首先访问a的地址,a地址的内容是另一个地址,通过访问另一个地址找到我们所需要的内容。所以访问指针比访问数组多了一层额外的提取。

所以数组和指针是很不一样的,一个是地址,一个是地址的地址。他们为什么会被混淆?是因为他们有一样的地方。

在函数形参中,数组和指针则表现的相当一致,char *argv和char argv[]是不是一样呢?其实不是一样的,只是在main函数中做形参时,argv[]被编译器默认为数组的第一个元素地址,*argv则在传值参数中,被当成指针所指向变量的值,而非变量本身,所以*argv也是一个首地址。

另外,编译器会在计算地址时自动加上不同类型的步长。所以a[i]和啊[i+1]其实距离不是1,而是4.

多维数组,并不是像矩阵那样的多维,多维数组在内存中也是线性结构。p[i][j]:如果是以一条长为n的轴来说,p[i]在i/n的点处,p[i][j]在该点的第j点处

请多指教。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值