数组中的元素是常量还是变量。。。。。。。。。。。。。。。。。
这种赋值一般都是按照常量来考虑的,单从语法上来说确实是变量,只不过编译阶段帮你分配了存储空间,后面你可以重新赋值或是修改里面的值(但要注意内存的分配和释放)
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
void foo(const char * file, int line, const char * s, void * p)
{
printf("%s:%d %p %s\n",file,line,p,s);
}
#define FOO(x) foo(__FILE__,__LINE__,#x,((void*)(x)))
int main(int argc, char *argv[])
{
long long junk[3][4];
FOO(junk);
FOO(&junk);
FOO(junk[0]);
FOO(&junk[0]);
FOO(&junk[0][0]);
return 0;
}
程序输出结果
gcc -O3 junk.c && ./a.out
junk.c:13 0x7fff846d9040 junk
junk.c:14 0x7fff846d9040 &junk
junk.c:14 0x7fff846d9040 junk[0]
junk.c:15 0x7fff846d9040 &junk[0]
junk.c:16 0x7fff846d9040 &junk[0][0]
可以看到,这五个东西都是同样的值。
在汇编语言看来,这五个东西没有区别。
C 语言中数组的概念是一个十分丑陋的设计。我宁愿把它看作是语法糖。
就是说,用这种语法,可以方便的描述一连串内存的值,也方便计算元素地址的偏移量。
但无论如何,他就是一块连续的内存。
两者都可以,看你自己需要
常量