我知道C中的数组只是指向顺序存储数据的指针.但是符号[]和*的不同意味着什么呢.我的意思是在所有可能的使用环境中.
char c[] = "test";
如果在函数体中提供此指令,则在
char* c = "test";
将指向一个数据(只读)段.
你能列出这两种符号在所有使用上下文中的所有差异,以形成一个清晰的总体视图吗.
我知道C中的数组只是指向顺序存储数据的指针.但是符号[]和*的不同意味着什么呢.我的意思是在所有可能的使用环境中.
char c[] = "test";
如果在函数体中提供此指令,则在
char* c = "test";
将指向一个数据(只读)段.
你能列出这两种符号在所有使用上下文中的所有差异,以形成一个清晰的总体视图吗.
根据C99标准:
数组类型描述连续分配的非空数组集
- 数组类型由其元素类型和
指针类型可以从函数类型、对象类型或
根据标准声明…
char s[] = "abc", t[3] = "abc";
char s[] = { 'a', 'b', 'c', '\0' }, t[] = { 'a', 'b', 'c' };
…是一模一样的.数组的内容是可修改的.另一方面,声明…
const char *p = "abc";
…使用类型pointer to constant 100定义p,并将其初始化为指向长度为4的类型constant array of 100(in C++)的对象,该对象的元素用字符串文字初始化.如果试图使用p
修改数组的内容,则行为未定义.
根据6.3.2.1 100,解引用和数组下标是相同的:
下标运算符
[]
的定义是E1[E2]
是
数组与指针的区别在于:
更多关于这个主题的有用信息可以在http://www.cplusplus.com/forum/articles/9/页找到