若有说明:int i, j=2,*p=&i;,则能完成i=j赋值功能的语句是

2024-12-02 21:22:00
推荐回答(2个)
回答1:

*p=*&j。

int *p=&i已经定义了指针p指向了变量i,也就是p的值是变量i的地址,即*p=i。

i=*p意思是将指针p所指向的值赋予给i,*p=*&j是指将j的值赋予给指针p所指向的值,而指针p指向了变量i,因为就实现将j的值赋予给i; i=&j是指将变量j的地址赋予给i;*p等于变量i了,因此 i=**p就已经不能满足实现i=j。

扩展资料:

特有特点

1、C语言是一个有结构化程序设计、具有变量作用域(variable scope)以及递归功能的过程式语言。

2、C语言传递参数均是以值传递(pass by value),另外也可以传递指针(a pointer passed by value)。

3、不同的变量类型可以用结构体(struct)组合在一起。

4、只有32个保留字(reserved keywords),使变量、函数命名有更多弹性。

5、部份的变量类型可以转换,例如整型和字符型变量。

6、通过指针(pointer),C语言可以容易的对存储器进行低级控制。

7、预编译处理(preprocessor)让C语言的编译更具有弹性。

参考资料:

百度百科-c语言

回答2:

没有正确答案。推测B应改为 B.*p = *&j;

题干分析:在声明中 int i, j=2, *p=&i; 定义了i,j 两个整数型变量,并且j的值为2。后面又定义了一个整数型指针p。只有声明变量里面的*才表示p是一个指针,与后面的*不一样。所以这里的p是一个指针,后面的&i表示取i的地址。于是p就得到了i的地址。p指向i。

所以若要把j赋值给i,有两种方法。一种是直接赋值,另一种是用指向i的p间接赋值。A、C和D都是要直接给i赋值。

A选项:*p是取p的内容,也就是取到了i的值。然而i并没有赋值。没有初始化的i里面的内存可能是其他程序使用过的,里面的东西是随机的。而且把i赋值给i也不对。

B选项:p*=*&j; 语法错误。*=表示要拿左边的东西乘以右边的东西再存入左边。右边的*&j表示先取j的地址,再根据j的地址去到j的内容。等价于j本身。左边是一个指针,因而不能和右边的整数相乘。编译时会发生类型错误。

C选项:把j