阴影中的曙光 发表于 2015-12-21 22:42:20

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


有int a;
那么
a是第一个数组元素,a是数组的首地址,那么a[]是神马???

lakerszhy 发表于 2015-12-22 10:07:25

没有a[]这个东东吧?

Caine 发表于 2015-12-24 08:25:33

这是在不知道有多少个元素时打的,编译器会自动算好

桃花飞舞 发表于 2015-12-24 08:51:29

在有函数的时候被调用的函数里边好像可以定义为a[]

黑龍 发表于 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,b,c);
        system("pause");
        return 0;
}
上面的我在VS2012中测试
输出结果是
10
20
i love fishc.com
不要和我说没有a[]这个东西 我不相信!

如果有不对的地方 欢迎大牛指正
@小甲鱼 @无名侠

~风介~ 发表于 2015-12-27 19:28:26

&a和a都是数组的首地址,没有a[]这东西吧。
或者说,你的意思是:
ElemType a[] =data... 这种定义? —— 这个在《c语言程序设计第二版》P90页里面有说到。
和ElemType *a = data...效果类似,不过还是有细微的差别~

黑龍 发表于 2015-12-27 20:20:40

本帖最后由 黑龍 于 2015-12-27 20:25 编辑

~风介~ 发表于 2015-12-27 19:28
&a和a都是数组的首地址,没有a[]这东西吧。
或者说,你的意思是:
ElemType a[] =data... 这种定义?...

可以这样定义的。之前我只知道字符串可以。。。。

无名侠 发表于 2015-12-29 21:41:17

黑龍 发表于 2015-12-27 18:42
没错 a[]是指写的时候不知道数组是多少 编译时编译器自动弄上
比如



{:9_240:}其实就是一个人性化的设计

黑龍 发表于 2015-12-29 21:47:32

无名侠 发表于 2015-12-29 21:41
其实就是一个人性化的设计

表示不喜欢用。。。。。。

小甲鱼 发表于 2015-12-29 23:38:38

背书党来也……

C99如是说:

A postfix expression followed by an expression in square brackets [] is a subscripted designation of an element of an array object. The definition of the subscript operator [] is that E1 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 designates the E2-th element of E1 (counting from zero).
对于 a 这种索引数组的写法你再熟悉不过了,不过 0 其实也是正确的,为什么呢?

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

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

页: [1]
查看完整版本: a[]这个东西到底要怎么理解