a[]这个东西到底要怎么理解
有int a;
那么
a是第一个数组元素,a是数组的首地址,那么a[]是神马??? 没有a[]这个东东吧? 这是在不知道有多少个元素时打的,编译器会自动算好 在有函数的时候被调用的函数里边好像可以定义为a[] 本帖最后由 黑龍 于 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[]这个东西 我不相信!
如果有不对的地方 欢迎大牛指正
@小甲鱼 @无名侠 &a和a都是数组的首地址,没有a[]这东西吧。
或者说,你的意思是:
ElemType a[] =data... 这种定义? —— 这个在《c语言程序设计第二版》P90页里面有说到。
和ElemType *a = data...效果类似,不过还是有细微的差别~ 本帖最后由 黑龍 于 2015-12-27 20:25 编辑
~风介~ 发表于 2015-12-27 19:28
&a和a都是数组的首地址,没有a[]这东西吧。
或者说,你的意思是:
ElemType a[] =data... 这种定义?...
可以这样定义的。之前我只知道字符串可以。。。。 黑龍 发表于 2015-12-27 18:42
没错 a[]是指写的时候不知道数组是多少 编译时编译器自动弄上
比如
{:9_240:}其实就是一个人性化的设计 无名侠 发表于 2015-12-29 21:41
其实就是一个人性化的设计
表示不喜欢用。。。。。。 背书党来也……
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]