为什么这个b选项是对的,想不明白

img


写c语言题目遇到这个问题,一直想不明白为什么这个b选项是对的,有知道的吗qwq。

这涉及数据类型的隐式转换问题。数值类型都可以进行隐式转换,这在逻辑上是可以的。不过现在的编译器对于test(8.2f)的写法应该是会产生警告或错误提示的,因为类型并不一致。
C肯定错误,是因为字符串实在是无法完成向整型的隐式转换。

8.2f有什么问题,这表示它是一个float类型的常量
在c语言中,值类型都可以互相隐式转换,8.2f转换成int是8
但是"n"不一样,这是个字符串,字符串是指针,指针和值完全是两种东西,不能隐式转换

8.2f 是 浮点型 可以转 int 类型, 会舍弃小数位

test(int)

a 为 char 可以转换为 int
b 为 float 可以截断转换为 int
c 为 char * 是个指针,强转指针和数值容易出错
d 和 a 一样是个字符型变量,可转换为 int

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7638791
  • 这篇博客你也可以参考下:有两个磁盘文件A和B,各自存放一行字母,今要求把这两个文件中的信息合并(按字母顺序排序),输出到一个新文件C中去
  • 除此之外, 这篇博客: 链表:由两个递增有序线性表A、B归并新的递减有序线性表C中的 由两个递增有序线性表A、B归并新的递减有序线性表C 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 数据结构题目

    严蔚敏版数据结构教材题集2.24

    假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原表(即A表和B表)的结点空间构造C表。

    此题的算法思想为:首先将B表连接到A表后面,即连接后的A表为新的C表,再进行递减有序的排序。

    c++代码如下:

    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    
    typedef struct LNode
    {
    	int data;										//数据域
    	struct LNode *next;								//指针域 
    } LNode, *LinkList;
    
    typedef struct SListInfo
    {
    	LinkList head;									//表头结点指针
    	LinkList tail;									//表尾结点指针
    	LNode *pCurNode;								//当前结点指针位置 
    	int length;										//单链表的长度(元素个数) 
    } SListInfo;
    
    void InitList( SListInfo &L )
    {	//初始化单链表 
    	cout<<"-进行初始化操作-"<<endl;
    	L.head = (LNode *)malloc(sizeof(LNode));		//申请头结点存储空间
    	if( L.head == NULL )
    		cout<<"error1"<<endl;						//存储空间申请失败
    	L.head->next = NULL;							//头结点后无其他结点
    	L.tail = L.head;								//尾结点指针也指向头结点
    	L.pCurNode = L.head;							//当前指针也指向头结点
    	L.length = 0;									//单链表长度为零
    }	//InitList
    
    void ListTraverse( SListInfo L )
    {	//从链表的第一个元素开始,依次访问并输出链表的数据元素
    	cout<<"-输出单链表如下-"<<endl;
    	if( L.head->next == NULL )
    		cout<<"error6"<<endl;;
    	L.pCurNode = L.head->next;
    	while( L.pCurNode->next != NULL)
    	{
    		cout<<L.pCurNode->data<<endl;				//输出元素 
    		L.pCurNode = L.pCurNode->next;
    	}
    	cout<<L.pCurNode->data<<endl;					//输出表尾元素 
    }	//ListTraverse
    
    void InsertElem( SListInfo &L, int i, int e )
    {	//在第i个位置后插入新的数据元素e
    	LNode *s = (LNode *)malloc(sizeof(int));		//申请新的结点
    	if( s == NULL )
    		cout<<"error8"<<endl;;						//申请失败
    	s->data = e; 									//将e存入新结点 
    	L.pCurNode = L.head;
    	for( ; i > 0; i -- )							//找到位置i 
    	{
    		if( L.pCurNode->next == NULL)
    		{
    			cout<<"error9"<<endl;
    			break;
    		}
    		L.pCurNode = L.pCurNode->next;
    	}
    	if( L.pCurNode->next != NULL)
    	{
    		s->next = L.pCurNode->next;					//插入元素e 
    		L.pCurNode->next = s;
    		L.length += 1;								//链表长度+1 
    	}
    	else
    	{
    		L.pCurNode->next = s;
    		s->next = NULL;
    		L.length += 1;
    		L.tail = s;
    	}
    }	//InsertElem
    
    int RankList( SListInfo &L )
    {
    	LNode *p;
    	L.pCurNode = L.head->next;
    	while( L.pCurNode->next != NULL )
    	{
    		p = L.pCurNode->next;
    		while( p != NULL )											//冒泡排序(递减) 
    		{
    			if( L.pCurNode->data < p->data )
    			{
    				L.pCurNode->data = L.pCurNode->data + p->data;		//交换数值 
    				p->data = L.pCurNode->data - p->data;
    				L.pCurNode->data = L.pCurNode->data - p->data;
    			}
    			p = p->next;
    		}
    		L.pCurNode = L.pCurNode->next;
    	}
    }
    
    SListInfo newList( SListInfo &La, SListInfo &Lb )
    {	//合并A、B表为C表,并使其递减有序
    	La.tail->next = Lb.head->next;					//连接两个链表
    	La.tail = Lb.tail;								//现在的A表即为新的C表 
    	La.length = La.length + Lb.length;
    	RankList(La);									//递减排序 
    	return La;
    }	//newList
    
    int main()
    {
    	int i, n, d;
    	int &e = d;
    	SListInfo La, Lb;
    	InitList(La);
    	InitList(Lb);
    	cout<<"-请输入链表A的长度-"<<endl;
    	cin>>n;
    	cout<<"-请依次输入A表数据元素-"<<endl;
    	for( i = 0; i < n; i ++ )
    	{
    		cin>>d;
    		InsertElem(La,i,e);
    	}
    	cout<<"-请输入链表B的长度-"<<endl;
    	cin>>n;
    	cout<<"-请依次输入B表数据元素-"<<endl;
    	for( i = 0; i < n; i ++ )
    	{
    		cin>>d;
    		InsertElem(Lb,i,e);
    	}
    	La = newList(La,Lb);
    	cout<<"-输出新表如下-"<<endl;
    	ListTraverse(La);
    }