C c; B b, &p = c;
时间: 2024-04-02 19:36:34 浏览: 13
这段代码定义了一个 `C` 类对象 `c`,一个 `B` 类对象 `b`,以及一个指向 `C` 类对象的 `B` 类型的引用 `p`。
由于 `C` 类是 `B` 类的派生类,因此可以将 `C` 类对象的地址赋值给 `B` 类型的引用 `p`。这种情况下,可以通过 `p` 来访问 `C` 类对象中的成员变量和成员函数,但是只能访问 `B` 类中定义的成员,不能访问 `C` 类中新增加的成员或覆盖 `B` 类中的成员。这就是多态的应用场景之一,通过基类类型的指针或引用来访问派生类对象,实现对派生类对象的多态访问。
相关问题
#include <stdio.h> int main(void){ int a,b,c,*p,*q,*h,*temp; scanf("%d %d %d",&a,&b,&c); p=&a;//把a的地址赋给了指针变量p q=&b;//把b的地址赋给了指针变量q h=&c;//把c的地址赋给了指针变量h if(a>b) { temp=&a;//a的地址赋给了指针变量temp p=q;//p=&b q=temp;//q=&a } if(a>c) { temp=&a;//a的地址赋给了指针变量temp p=h;//p=&c h=temp;//h=&a } if(b>c){ temp=&b; q=h;//q=&c h=temp;//h=&b } printf("%d %d %d",*p,*q,*h); return 0; }但是这段代码,输入3 2 1 输出 1 3 2 如何修正使其从大到小输出
要使程序从大到小输出,只需要改变交换的顺序即可。在 if 语句中,将交换指针变量的顺序倒过来即可。修改后的代码如下所示:
```
#include <stdio.h>
int main(void){
int a, b, c, *p, *q, *h, *temp;
scanf("%d %d %d", &a, &b, &c);
p = &a; //把a的地址赋给了指针变量p
q = &b; //把b的地址赋给了指针变量q
h = &c; //把c的地址赋给了指针变量h
if (a < b) { //先保证a是最大的
temp = &a; //a的地址赋给了指针变量temp
p = &b; //p=&b
q = temp; //q=&a
}
if (a < c) { //再保证a是最大的
temp = &a; //a的地址赋给了指针变量temp
p = &c; //p=&c
h = temp; //h=&a
}
if (b < c) { //最后保证b是次大的
temp = &b;
q = &c; //q=&c
h = temp; //h=&b
}
printf("%d %d %d", *p, *q, *h);
return 0;
}
```
这样修改后程序会先保证 a 是三个数中的最大值,然后保证 b 是次大的值,最后 c 是最小的值。这样输出的就是从大到小排列的结果。
下列关于指针的用法中错误的是( )。 A. int i,*p; p =&i; B. int *p; p = NULL; C. int i,*p=&i; D. int i = 5,*p; *p = &i;
### 回答1:
&i;
B. int i=10,*p=&i;
C. int i=10,*p; *p = &i;
D. int i=10,*p; p = i;
在这里,错误的是 C 选项。在 C 选项中,*p 尝试去赋值 &i,但是 *p 是一个指针变量,而 &i 是 i 变量的地址。因此,不能将 &i 赋值给 *p。
正确的用法应该是将 p 赋值为 &i,然后使用 *p 来访问 i 变量的值。例如:
int i = 10, *p;
p = &i;
*p = 20; // 现在 i 的值为 20
另外,A 选项是正确的,B 选项也是正确的,D 选项是错误的。在 D 选项中,p 尝试赋值 i,但是 p 是一个指针变量,而 i 是一个整数变量。因此,不能将 i 赋值给 p。
### 回答2:
&i; *p= 10; B. int a[5]; int *p = a; C. int i; int *p = &i; D. int a[5]; int *p = &a;
### 回答3:
&i; B. int *p,i; p = &i; C. int *p,i; *p = &i; D. int i,*p; *p = 10; 正确答案是:C. int *p,i; *p = &i;
解释:C选项中,指针p未被初始化,不能直接将地址&i赋给*p。应该先为指针p分配内存空间,然后再将地址赋给它。正确写法应该是 int *p,i; p = &i; *p = 10;
相关推荐
![c](https://img-home.csdnimg.cn/images/20210720083646.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)