❶ c语言不同类型数据传递的问题
浮点数使用ieee-754标准,单精度和双精度浮点数长度和格式都不同,直接复制时需要考虑格式是否匹配的问题。而且你接收的字符还存在大、小端问题,需要根据实际情况来转换。
❷ C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是
答案是B,单向的值传递
简单变量做实参时,相应的形参变量也是简单变量,它们之间的数据传递方式是单向的值传递,即数据只能由实参传到形参,形参值的改变不影响实参值的变化。
(2)c语言数据传输扩展阅读:
形参和实参的特点:
1、形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。
2、实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。
3、实参和形参在数量上,类型上、顺序上应严格一致,否则就会发生类型不匹配的错误。
4、在一般传值调用的机制中只能把实参传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参值发生改变,而实参中的值不会变化。而在引用调用的机制当中是将实参引用的地址传递给了形参,所以任何发生在形参上的改变实际上也发生在实参变量上。
参考资料:网络——形参
❸ 在C语言中,函数实参与形参之间的数据传递方式是( )传递方式。
值传递。
实参与形参数据传递有两种方式:值传递与地址传递。
地址传递的形式为
int
&a=b;
也就是我们所说的引用,但引用只有C++中有,所以C语言都是值传递的。
有些人有误解:认为C语言的int
*p=&a;不也是按地址传递吗?其实不是这样的。
深入理解值传递与地址传递就会发现:
值传递是:把实参的值传给一个变量(形参)。所以int
*p=&a也是把a的地址值传给了指针变量p
地址传递是:直接把地址传进来,没有赋给任何变量,这样在函数体内对形参的操作也就是对实参地操作。有这种功能的也就是引用(&)了。
❹ C语言规定,调用一个函数时,实参变量和形参变量之间的数据传递方式是什么
函数只有两种传递方式:
1、值传递,又称单向传递,只能把实参数值传给形参 ,形参最后的结果不影响实参(形参改变大小 ,实参大小不变)。
2、址传递,通过指针,把实参的地址给形参,形参的大小可以影响实参。
(4)c语言数据传输扩展阅读:
实参变量和形参变量之间的调用过程
1、函数的形参列于函数声明中,在函数定义的函数体内使用,在未出现函数调用时,形参不占内存中的存储单元。
2、将实参的值传递给形参,当函数被调用时,实参列在函数名后面的括号里,执行函数调用时,实参被传递给形参。
3、在执行函数期间,由于形参已经有值,可以利用其进行相关运算。
4、通过return语句将函数值带回到主调函数。
5、调用结束,形参单元被释放。实参单元仍保留并维持原值(值传递)。
❺ c语言 如何把数据文件中的数据传给数组
1.
先打开文件。
2.
自己写过getline函数,取文本的一行保存到一个字符串中。
3.
用malloc函数给line分配空间。
4.
对于第一行,取特定的字符串line取代替它,如果第二行是空行也这么做
5.
在建立一个字符串数组,用strp将他们放入字符串数组strline[i]中。
6.
构造一个结构数组,将得到的字符串line用strtok(line,"
")函数分开依次放入结构数组中的字符串成员中,记得不能用字符串数组的字符串,strtok函数会改变字符串的,而line就无所谓了。
7.
知道用getline函数返回一个负数(一般我用负数标记文档读写完毕)。结束读操作。
8.
现将前面的名字以及空行写入new的文本中,用putline函数(将字符串写入文档中)。
9.
再从字符串数组逆序写入new的文本中。
10.
如果结构数组不用了,就释放strp分配的空间,并且以及line的空间,前面两行无所谓,反正占的空间不大。所有用数组,还是动态分配都没什么大的关系。
❻ C语言中如何传数据才能保证数据正确
1、传递数据类型要一致。
2、考虑传递的是值传递还是地址传递。值传递不会影响原始数据,地址传递如果对数据进行修改会直接影响到原始数据。
❼ C语言socket编程实现网络数据传输
仅供参考
// serverTCP.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
using namespace std;
long long cnt = 0;
void transFile(SOCKET s)
{
printf("新子服务%d......",cnt);
send(s,"welcome to TCP FILE SERVER !",strlen("welcome to TCP FILE SERVER !")+1,0);
char Buf[BUFSIZE];
FILE *fp;
//printf("客户端已打开\n请输入存放文件地址:\n");
char FilePath[128]={"0"};
ltoa(cnt,FilePath,10);
if((fp=fopen(FilePath,"wb"))==NULL)
{
printf("文件未打开\n");
return;
}
else
{
send(s,"开始传送",strlen("开始传送")+1,0);
//得到文件大小
char Size[20];
long int FileSize=0;
recv(s,Size,21,0);
FileSize=atol(Size);
printf("得到文件大小: %d\n",FileSize);
//开始传送
char Block[BUFSIZE];
long int x=0;
while (1)
{
x += BUFSIZE;
if(x < FileSize)
{
recv(s,Block,BUFSIZE+1,0);
fwrite(Block,1,BUFSIZE,fp);
}
else
{
recv(s,Block,FileSize+BUFSIZE-x+1,0);
printf("文件接收完毕\n");
fwrite(Block,1,FileSize+BUFSIZE-x,fp);
fclose(fp);
break;
}
}
}
fclose(fp);
closesocket(s);
}
int _tmain(int argc, _TCHAR* argv[])
{
WORD myVersionRequest;
WSADATA wsaData;
myVersionRequest=MAKEWORD(1,1);
int err;
err = WSAStartup(myVersionRequest,&wsaData);
if (!err)
{
printf("服务器启动......\n");
}
else
{
printf("服务器启动失败!");
exit(0);
}
SOCKET serSocket = socket(AF_INET,SOCK_STREAM,0);//创建了可识别套接字
SOCKADDR_IN addr;
addr.sin_family=AF_INET;
addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//ip地址
addr.sin_port=htons(PORTBASE);//绑定端口
bind(serSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR));//绑定完成
listen(serSocket,ACESIZE);//其中第二个参数代表能够接收的最多的连接数
SOCKADDR_IN clientAddr;
int len = sizeof(SOCKADDR);
while(1)
{
cnt++;
SOCKET serConn;
serConn = accept(serSocket,(SOCKADDR*)&clientAddr,&len);//如果这里不是accept而是conection的话。。就会不断的监听
if(_beginthread((void (*)(void *))transFile, ACESIZE,(void *)serConn) < 0) return 0;
}
return 0;
}
// clientTCP.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
WORD myVersionRequest;
WSADATA wsaData;
myVersionRequest=MAKEWORD(1,1);
int err;
err=WSAStartup(myVersionRequest,&wsaData);
if (!err)
{
printf("已打开套接字\n");
}
else
{
//进一步绑定套接字
printf("套接字未打开!");
return 0;
}
SOCKET cliSocket =socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addr;
char ip_addr[16]={"127.0.0.1"};
addr.sin_addr.S_un.S_addr=inet_addr(ip_addr);
addr.sin_family=AF_INET;
addr.sin_port=htons(PORT);
char ACK[64];
connect(cliSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR));//开始连接
recv(cliSocket,ACK,sizeof(ACK),0);
printf("%s\n",ACK);
FILE *fp;
int FileSize=0;
char Block[BUFSIZE]={"0"};
char FilePath[128]={"0"};
int i=0;
do
{
printf("请输入文件地址:\n");
gets(FilePath);
i = 0;
if((fp=fopen(FilePath,"rb"))==NULL)
{
i = 1;
printf("文件打开失败\n");
}
}while(i);
fseek(fp,0L,SEEK_END);
FileSize=ftell(fp);
printf("待传送文件大小: %d\n",FileSize);
printf("等待服务器接受......\n");
recv(cliSocket,Block,sizeof(Block),0);
printf("%s\n",Block);
if(strcmp(Block,"开始传送")==0)
{
char Size[20];
ltoa(FileSize,Size,10);
send(cliSocket,Size,sizeof(Size),0);
fseek(fp,0L,SEEK_SET);
long int y=0;
char trans[BUFSIZE];
while(!feof(fp))
{
fread(trans,1,BUFSIZE,fp);
y=y+BUFSIZE;
if(y<FileSize)
{
send(cliSocket,trans,BUFSIZE+1,0);
}
else
{
send(cliSocket,trans,FileSize+BUFSIZE-y+1,0);
closesocket(cliSocket);
WSACleanup();
}
}
}
printf("文件发送完毕\n");
fclose(fp);
closesocket(cliSocket);
WSACleanup();
system("pause");
return 0;
}
❽ C语言中如何将结果传递给另一个C语言文件
通过函数的传址参数(引用或指针)或返回值传递。
多个人合作时,必须提前约定好接口函数的声明格式。 (这里的所谓接口函数就是所有可能需要用来互相传递结果的函数)
❾ C语言数据传送
参考代码:
#include<stdio.h>
intmain()
{
inta[100],i,j;
for(i=0;i<100;i++)
{
if(0==i%2)
{
a[i]=2;
}
else
{
a[i]=1;
}
}
for(j=0;j<100;j++)
{
printf("%d",a[j]);
}
printf(" ");
return0;
}
另外,数组a[100]中没有a[100]这个元素,C语言中数组元素下标是从0开始的。