大一C语言问题,有关结构体。。。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大一C语言问题,有关结构体。。。相关的知识,希望对你有一定的参考价值。
定义结构体teleno,包含两个成员:姓名,电话
定义一个查找某人电话号码的函数。
编写程序,输入若干人员的姓名和电话,以“#”结束,并查找某人的电话号。
#include <malloc.h>
#include <string.h>
#include <windows.h>
struct teleno
char name[10];
int number;
;
struct teleno * Init(struct teleno *);
void Find_num(struct teleno *);
bool Is_same(char *,char *);
struct teleno * Init(struct teleno *a)
int i;
struct teleno *p;
for(i=0; i<5; i++)
p = (struct teleno *)malloc(sizeof(struct teleno));
printf("\\n----%d----\\n",i+1);
printf("请输入姓名:");
scanf("%s",p->name);
printf("请输入号码:");
scanf("%d",&p->number);
a[i] = *p;
return a;
void Find_num(struct teleno *a)
int i,t = 0;
char Name[10];
char *p = Name;
char word;
printf("\\n请输入查找人姓名:");
while((word = getchar()) != '#')
*p++ = word;
*p = '\\0';
/*while(1)
if((word = getchar()) == '#')
break;
*p++ = word;
for(i=0; i<5; i++)
if(Is_same(Name,a->name))
printf("%s:",a->name);
printf("%d\\n",a->number);
t = 1;
*a++;
if(t == 0)
printf("Sorry!未找到相应号码!\\n");
return;
bool Is_same(char *p1,char *p2)
int i = 0,j,k;
p1++;
j = strlen(p2);
k = strlen(p1);
if(j != k)
return false;
while((*p1 != '\\0')||(*p2 != '\\0'))
if(*p1 == *p2)
i++;
p1++;
p2++;
if(i == j)
return true;
else
return false;
int main()
teleno a[5];
struct teleno *p = a;
p = Init(p);
Find_num(a);
system("pause");
return 0;
【PS】根据您说的,我做了一下,可能不符合您的意思,我没太读清题意:
1.是不是再导入姓名和号码时是#结束,然后输入姓名查号码?
2.是不是在查询时输入参考姓名是以#结束?
您好,您想询问c语言的哪个问题
int 占4个字节char 占1个字节float 占4个字节本题结构体由一个int变量 、一个char数组10个元素、一个float变量组成,所以结构体变量wang所占的内存字节为:4+10*1+4=18个字节。
C语言的结构要掌握以下几点:(1)C语言的注释是/* ··· */,而不是//···,//是C++的单行注释,有的C语言版本也认可。(2)C语言区分大小写,每句以分号结尾。(3)C语言程序是从main函数开始的。函数的返回值如果缺省则为int,而不是void。(4)函数必须用return来返回。即使void类型也不建议省略。(5)使用函数时须包含相应的头文件。自定义的头文件用双引号,C语言自身的头文件用 2、main()函数的写法与含义main()的参数和返回值全部省略,这和上例含义相同。省略写法是一种很不好的习惯。
每个C程序通常分为两个文件。一个文件用于保存程序的声明(declaration),称为头文件。另一个文件用于保存程序的实现(implementation),称为定义(definition)文件。C程序的头文件以“.h”为后缀,C 程序的定义文件以“.c”为后缀。头文件的内容也可以直接写C程序中,但这是很不好的习惯。许多初学者用了头文件,却不明其理。在此略作说明。(1)通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功 能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。(2)头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中 的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的 负担。 关于头文件的内容,初学者还必须
(1)头文件中可以和C程序一样引用其它头文件,可以写预处理块,但不能写语句命令。(2)可以申明函数,但不可以定义函数。(3)可以申明常量,但不可以定义变量。(4)可以“定义”一个宏函数。注意:宏函数很象函数,但却不是函数。其实还是一个申明。(5)结构的定义、自定义数据类型一般也放在头文件中。(6)#include ,编译系统会到C语言固定目录去引用。#include "filename.h",系统一般首先在当前目录查找,然后再去环境指定目录查找。4、好的风格是成功的关键版本申明、函数功能说明、注释等是C语言程序的一部分。不养成很好的习惯则不能成为C语言高手(专业人员)。
二、比较、逻辑、位运算符只有类型相同(或C语言能自动转换)的表达式才能比较,如果类型不同就必须用函数转换。例如:判断一字符串的长度是否等于10,就要用strlen()将字符串的长度求出来变成了整型,才能和10比较。比较运算符只有6个,即:等于(==)、不等于(!=)、大于(>)、小于(=)、小于等于(<=)。比较运算符也叫关系运算符。逻辑运算符只有3个,即:与AND(&&)、或OR(||)、非NOT(!)。位运算符只有6个,即:与AND(&)、或OR(|)、非NOT(~)、异或XOR(^)、左移ShiftLeft(<>)。 三、数组(1)数组名也是一变量名,定义时须指定类型和长度。(2)长度可以方括号中直接指定,也可以通过赋值来间接指定。(3)数组可以在定义时直接赋值,也可以定义时不赋值,之后再赋值。(
(4)当使用超出范围的值时,编译不出错,但运行会出错。(上例运行时出错后,选“忽略”后得到的结果)
如果您感到满意,请点亮五颗小星星哦,您的评价是对我最好的鼓励,祝您生活愉快!
诚心为您解答每一个问题!如您满意请采纳最佳!如有疑问请继续追问!让我们一起相互学习,一起进步!您也可以选择先关注我,以后有其他的问题也可以找到我,再次咨询我!再次感谢!!
提问您好,选b
数组地址从0开始,所以是第二个括号里第二个数字
就是4
您好,如果此回答对您有帮助的话 亲给个赞吧
C语言结构体存储问题
自定义了一个放有很多参数的结构体struct snmp_seq,变量sp
struct snmp_seq
int get_snmp[BUFFER_SIZE];
int total_length;
int version;//版本号
int community[BUFFER_SIZE];//团体关键字
int command;//PUD类型
int reqid[BUFFER_SIZE];//请求标识
int errstat;//错误状态
int errindex;//错误索引
int pdu_type_start;
int errorstatus_start;
int errorIndex_start;
int oid_value_start;
int varbing_start;
struct variable_list//绑定变量
int oid_name[BUFFER_SIZE];//OID值
int oid_len;//OID长度
int value_type;//变量值的类型
int value_len;//变量值的长度
int oid_value;//变量值的值
val;
sp;
function1(sp, WORK,len,fd);
调用函数,将结构体变量sp带入,对WORK进行处理,将处理的结果在函数function1中,通过sp.xxxx赋值。
如果function1函数结束返回,那结构体struct snmp_seq中的赋值就都会消失,
我如何在function1中开辟存储空间去存储,之后在另一个函数中能对这个存储结构进行调用呢?
你最好重写你的function1,因为你function1(sp, WORK,len,fd);
这样调用函数时参数都是值传递,也就是相当于把sp中的参数值复制了一份给function1使用,函数执行完退出后,这些值的空间也就被释放了,所以sp中的值没有改变。你可以这样写:
int oid_name[BUFFER_SIZE];//OID值
int oid_len;//OID长度
int value_type;//变量值的类型
int value_len;//变量值的长度
int oid_value;//变量值的值
variable_list_t;
typedef struct
int get_snmp[BUFFER_SIZE];
int total_length;
int version;//版本号
int community[BUFFER_SIZE];//团体关键字
int command;//PUD类型
int reqid[BUFFER_SIZE];//请求标识
int errstat;//错误状态
int errindex;//错误索引
int pdu_type_start;
int errorstatus_start;
int errorIndex_start;
int oid_value_start;
int varbing_start;
variable_list_t val;
SNMP_t;
void main(void)
SNMP_t sp;
function1(&sp, WORK,len,fd);
function1(SNMP_t* snmp, WorkType work, int len, int fd)
snmp->total_length=work.xxx;
...
不知道你能看懂这段代码吗?其实最核心的问题是你要想在函数退出后改变函数参数的值,就必须使用地址传递
typedef struct
...
snmp_seq;
snmp_seq sp;
然后再function1里直接对变量sp操作,如sp.xxx= xxx;
函数运行完,变量赋值保存;追问
这样也没有对赋值的结构进行保存啊?您能说得再详细点吗?
追答这个结构体定义的是全局变量,会有保存,function1(WORK,len,fd); 可以不带sp参数
以上是关于大一C语言问题,有关结构体。。。的主要内容,如果未能解决你的问题,请参考以下文章