鱼C论坛

 找回密码
 立即注册
查看: 2299|回复: 9

a[]这个东西到底要怎么理解

[复制链接]
发表于 2015-12-21 22:42:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

有int a[10];
那么
a[0]是第一个数组元素,a是数组的首地址,那么a[]是神马???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-12-22 10:07:25 | 显示全部楼层
没有a[]这个东东吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-24 08:25:33 From FishC Mobile | 显示全部楼层
这是在不知道有多少个元素时打的,编译器会自动算好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-24 08:51:29 | 显示全部楼层
在有函数的时候被调用的函数里边好像可以定义为a[]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-27 18:42:41 | 显示全部楼层
本帖最后由 黑龍 于 2015-12-27 20:25 编辑

没错 a[]是指写的时候不知道数组是多少 编译时编译器自动弄上
比如
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
        int b[]={10,20};
        char c[]="i love fishc.com";
        printf("%d\n%d\n%s\n",b[0],b[1],c);
        system("pause");
        return 0;
}
上面的我在VS2012中测试
输出结果是
10
20
i love fishc.com

不要和我说没有a[]这个东西 我不相信!

如果有不对的地方 欢迎大牛指正
@小甲鱼 @无名侠
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2015-12-27 19:28:26 | 显示全部楼层
&a[0]和a都是数组的首地址,没有a[]这东西吧。
或者说,你的意思是:
ElemType a[] =data... 这种定义? —— 这个在《c语言程序设计第二版》P90页里面有说到。
和ElemType *a = data...效果类似,不过还是有细微的差别~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-27 20:20:40 | 显示全部楼层
本帖最后由 黑龍 于 2015-12-27 20:25 编辑
~风介~ 发表于 2015-12-27 19:28
&a[0]和a都是数组的首地址,没有a[]这东西吧。
或者说,你的意思是:
ElemType a[] =data... 这种定义?  ...


可以这样定义的。之前我只知道字符串可以。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-29 21:41:17 | 显示全部楼层
黑龍 发表于 2015-12-27 18:42
没错 a[]是指写的时候不知道数组是多少 编译时编译器自动弄上
比如

其实就是一个人性化的设计
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-29 21:47:32 | 显示全部楼层
无名侠 发表于 2015-12-29 21:41
其实就是一个人性化的设计

表示不喜欢用。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-29 23:38:38 | 显示全部楼层
背书党来也……

C99如是说:

A post&#64257;x expression followed by an expression in square brackets [] is a subscripted designation of an element of an array object. The de&#64257;nition of the subscript operator [] is that E1[E2] is identical to (*((E1)+(E2))). Because of the conversion rules that apply to the binary + operator, if E1 is an array object (equivalently, a pointer to the initial element of an array object) and E2 is an integer, E1[E2] designates the E2-th element of E1 (counting from zero).

对于 a[0] 这种索引数组的写法你再熟悉不过了,不过 0[a] 其实也是正确的,为什么呢?

因为上边说了 E1[E2] 相当于 (*((E1) + (E2))),即 0[a] = (*((0) + (a)))

所以 [] 的作用就是将 E1[E2] 作为指针 + 偏移地址的方式读取(E1 或 E2 随意一个为指针均可)。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 16:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表