1. c语言中数组名不是指针
2. 数组首地址不能当作变量进行加减,如不能arr++。
3. 指针变量指向的数组不能修改。
4. 用数组名做函数实参时,不是把数组的值传递给对应的形参,而是把实参数组的起始地址传递给形参,他们共同占同一段内存单元。
所以,在函数中改变数组内容会改变原本数组中的内容。
5. 请简述C语言的隐式类型转换发生的四种情况,并说明每种情况如何转换。
- 算术运算式中,低类型能够转换为高类型。
- 赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给它。
- 函数调用中参数传递时,系统隐式地将实参转换为形参的类型后,赋给形参。
- 函数有返回值时,系统将隐式地将返回表达式类型转换为返回值类型,赋给调用函数。
6. 联合成员共享一个存储空间。在联合中,任何一个成员被使用时,都是从同一地址单元开始存放的。
```c
void main(int argc, char *argv[])
{
union example
{
int a;
int b;
struct
{
int x;
int y;
}in;
}e;
printf("size of union is: %d\n",sizeof(e));
printf("size of e.a is: %d\n",sizeof(e.a));
printf("size of e.b is: %d\n",sizeof(e.b));
printf("size of e.in.x is: %d\n",sizeof(e.in.x));
printf("size of e.in.y is: %d\n",sizeof(e.in.y));
printf("addr of e.a is: %d\n",&(e.a));
printf("addr of e.b is: %d\n",&(e.b));
printf("addr of e.in.x is: %d\n",&(e.in.x));
printf("addr of e.in.y is: %d\n",&(e.in.y));
e.a = 2;
e.b = 3;
printf("e.a: %d, e.b: %d\n",e.a,e.b); // 2 , 2
e.in.x = e.a * e.b;
e.in.y = e.a + e.b;
printf("e.in.x: %d, e.in.y: %d\n",e.in.x,e.in.y); // 4, 8
}
// size of union is: 8
// size of e.a is: 4
// size of e.b is: 4
// size of e.in.x is: 4
// size of e.in.y is: 4
// addr of e.a is: 6487568
// addr of e.b is: 6487568
// addr of e.in.x is: 6487568
// addr of e.in.y is: 6487572
// e.a: 3, e.b: 3
// e.in.x: 9, e.in.y: 18
```
7. C语言的数组作为参数传递给函数时,是作为引用方式传递的。简单类型,如int,在传递给函数的时候是按值传递的。
一键复制
编辑
Web IDE
原始数据
按行查看
历史