C语言左值可以是不完全部类?
C语言左值可以是不完全类型??不完全类型一般是用在声明上,用于描述大小未知的对象,不能用来定义对象。但为
C语言左值可以是不完全类型??
不完全类型一般是用在声明上,用于描述大小未知的对象,不能用来定义对象。
但为什么可以成为左值呢??
可否举个例子???
[解决办法]
不完全类型是暂时没有完全定义好的类型,编译器不知道这种类型该占几个字节的存储空间,具有不完全类型的变量可以通过多次声明组合成一个完全类型,当编译器碰到第一个声明时,认为str是一个不完全类型,碰到第二个声明时str就组合成完全类型了,如果编译器处理到程序文件的末尾仍然无法把str组合成一个完全类型,就会报错。
是可以作为左值的:
#include <stdio.h>
char str[];
void assign(void)
{
str[0] = 'H';
str[1] = 'e';
str[2] = 'l';
str[3] = 'l';
str[4] = 'o';
str[5] = '!';
str[6] = '\0';
}
char str[7];
int main(int argc, char* argv[])
{
assign();
printf("%s\n", str);
return 0;
}
[解决办法]具有不完全类型的变量可以通过多次声明组合成一个完全类型,比如数组str声明两次:
char str[];
char str[10];当编译器碰到第一个声明时,认为str是一个不完全类型,碰到第二个声明时str就组合成完全类型了,如果编译器处理到程序文件的末尾仍然无法把str组合成一个完全类型,就会报错。读者可能会想,这个语法有什么用呢?为何不在第一次声明时就把str声明成完全类型?有些情况下这么做有一定的理由,比如第一个声明是写在头文件里的,第二个声明写在.c文件里,这样如果要改数组长度,只改.c文件就行了,头文件可以不用改。
[解决办法]http://blog.csdn.net/sha_jinhao/article/details/8476347
[解决办法]是的