C语言:函数处理结构体

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct namect{
        char fname[20]; //数组
        char *lname;    //指针
        int letters;
};

void getinfo(struct namect *);
struct namect makeinfo(struct namect);
void showinfo(struct namect *);

int main(){
        struct namect persion;
        getinfo(&persion);
        persion=makeinfo(persion);
        showinfo(&persion);
        return 0;
}

/**
 * 已指针方式传递结构体
 */
void getinfo(struct namect * pst){
        printf("Entenr you first name\n");
        gets(pst->fname);               //不读取\n,会留在输入缓冲区中呢
        //fgets(pst->fname,20,stdin);
        printf("Entenr you last name\n");
        //gets(pst->lname);
        char temp[100];
        gets(temp);
        pst->lname = (char *)malloc(strlen(temp)+1);
        strcpy(pst->lname,temp);
        //fgets(pst->lname,20,stdin);
}

/**
 * 传递结构体作为参数
 */
struct namect makeinfo(struct namect info){
        info.letters = strlen(info.fname) + strlen(info.lname);
        return info;
}

void showinfo(struct namect * pst){
        printf("%s %s,your name contains %d letters\n",pst->fname,pst->lname,pst->letters);
}
时间: 2024-11-10 11:49:21

C语言:函数处理结构体的相关文章

关于c语言中的结构体使用偏移量求值问题

最近在看nginx源码,看到定时器的时候,发现一个结构体利用偏移量求值问题, 结构体相信做c开发的都遇到过,那么不知你对结构体中成员变量偏移这块是如何理解的; 首先我们先看一下nginx中的那个让我迷惑的地方 ev =    (event_t*)((char*)node - offsetof(event_t, timer)); 这里,可以得知道是利用event_t结构体的timer变量,来反求event_t结构体的地址 说明一下: event_t是一个结构体 node 也是一个结构体 timer

C语言中的结构体,结构体数组

C语言中的结构体是一个小难点,下面我们详细来讲一下:至于什么是结构体,结构体为什么会产生,我就不说了,原因很简单,但是要注意到是结构体也是连续存储的,但要注意的是结构体里面类型各异,所以必然会产生内存对齐的问题.也就是内存里面会有空档. 1.结构体的定义和赋值 结构体是可以直接初始化的,在定义的时候,就可以初始化,而且如果你的结构体中恰好有字符数组的话,这个时候初始化是不错的选择,原因很简单,字符数组只能定义的时候直接初始化 后来就不可以了,后来你就只能用strcpy函数来拷贝初始化了. str

linux 中 C 语言的使用 -- 结构体多态

在 Linux 内核代码,特别是驱动代码中经常见到的用法是使用一个标准结构,后面的代码基于这个结构来实现,类似面向对象的多态特性. 在 C 语言里面借助结构体和函数指针实现的这个功能,这里我们写了个例子,提取了关键代码: #include <stdio.h> struct s_new{ char name[10]; char* (* my_method)(char *name); }; char* powerful(char *name){ printf("%s is powerfu

9.Go语言基础之结构体

Go语言中没有类的概念,也不支持"类"的继承等面向对象的概念. Go语言中通过结构体的内嵌再配合接口,比面向对象具有更高的扩展性和灵活性. 1.类型别名和自定义类型 1.1自定义类型 在Go语言中有一些基本的数据类型,如string,整型,浮点型,布尔等数据类型,Go语言中可以使用type关键字来定义自定义类型. 自定义类型是定义了一个全新的类型.我们可以基于内置的基本类型定义,也可以通过struct定义. //将MyInt定义为int类型 type MyInt int 通过Type关

Go语言基础之结构体

Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. 类型别名和自定义类型 自定义类型 在Go语言中有一些基本的数据类型,如string.整型.浮点型.布尔等数据类型, Go语言中可以使用type关键字来定义自定义类型. 自定义类型是定义了一个全新的类型.我们可以基于内置的基本类型定义,也可以通过struct定义.例如: //将MyInt定义为int类型 type MyInt int 通过Type关键字的定义,

浅谈c语言typedef 与结构体指针(个人小经验)

 #include<stdio.h> #include<string.h> typedef struct emp{ char sex[8]; char name[15]; int age; }*emp;//这里我们用typedef把emp这个结构体变成了*emp这种指向结构体成员的结构体指针 /*typedef struct emp{ char sex[8]; char name[15]; int age; }pi,*emp;//为了程序的可读性最好不要这样声明*/ int m

获取网络接口信息——ioctl()函数与结构体struct ifreq、 struct ifconf

转载请注明出处:windeal专栏 Linux 下 可以使用ioctl()函数 以及 结构体 struct ifreq  结构体struct ifconf来获取网络接口的各种信息. ioctl 首先看ioctl()用法 ioctl()原型如下: #include <sys/ioctl.h> int ioctl(int fd, int request, ...); 参数: fd     : 文件描述符 request:  表示要请求的信息.如IP地址.网络掩码等 ...     :  后面的可变

【C语言】使用结构体和malloc函数时的一些错误。

使用结构体错误: #include <stdio.h> struct STU { char *name; int score; }stu,*pstu; int main () { strcpy(stu.name,"bit-tech"); strcpy(pstu->name,"bit-tech"); return 0; } 错误一:strcpy(stu.name,"bit-tech"); 结构体中的成员name是一个指针,声明结构

c语言基础常用字符串数组函数与结构体

字符串常用函数 printf("%d",sizeof(arr));//可查看数组arr所占用的内存(一个int占4位,char占一位) strcpy(arr1,arr2); 将arr2中的内容拷贝到arr1中:arr1的内存需大于arr2 strcmp(arr1,arr2): 逐个比较,若arr1>arr2 返回1: arr1=arr2 返回0: arr1<arr2 返回-1 strcat(arr1,arr2)字符串拼接 目的字符串数组大于两个字符串总和: strlen 从