首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言左值可以是不完全部类?

2013-01-20 
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
[解决办法]
是的

引用:
引用:不完全类型是暂时没有完全定义好的类型,编译器不知道这种类型该占几个字节的存储空间,具有不完全类型的变量可以通过多次声明组合成一个完全类型,当编译器碰到第一个声明时,认为str是一个不完全类型,碰到第二个声明时str就组合成完全类型了,如果编译器处理到程序文件的末尾仍然无法把str组合成一个完全类型,就会报错。

是可以作为左值的:……

热点排行