c语言指针6487572是谁的地址,c易错.md · kktao/c_learn - Gitee.com

这篇博客探讨了C语言中数组和指针的关系。文章指出数组名实际上相当于指向数组首元素的指针,但不能对数组名进行加减操作。在函数参数传递时,数组名传递的是数组的地址而非复制其内容。联合类型中,所有成员共享同一存储空间,通过改变其中一个成员会影响到其他成员的值。博客还展示了相关代码示例,解释了数组在函数调用中的按引用传递特性以及隐式类型转换的四种情况。
摘要由CSDN通过智能技术生成

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

原始数据

按行查看

历史

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值