详解C语言结构体中的char数组如何赋值

目录
  • 前景提示
  • 一.char数组类型的处理
    • 1.结构体初始化
    • 2.结构体内数据赋值(简单法)
  • 二.char数组指针类型的处理
    • 1.结构体初始化
    • 2.结构体内数据赋值
    • 3.结构体内输出数据
  • 三.全部代码
    • 1.char数组
    • 2.char数组指针
  • 总结

前景提示

定义一个结构体,结构体中有两个变量,其中一个是char类型的数组,那么,怎么向这个数组中插入数据,打印数据呢?

 typedef struct SequenceList {
	// 数组的元素
	char element[20];
	// 数组的长度
	int length;
};

定义一个结构体,结构体中有两个变量,其中一个是char类型的数组指针,那么,怎么向这个数组中插入数据,打印数据呢?

 // 定义顺序表结构体
typedef struct SequenceList {
	char *elment;
	int length;
};

这里的结构体处理的步骤

  • 结构体初始化
  • 结构体内数据赋值
  • 结构体内输出数据

本着上述的原则,先对第一种类型进行操作

一.char数组类型的处理

1.结构体初始化

         SequenceList L;
	L.element = (char*)malloc(sizeof(char)*10);
	L.length  = 10

2.结构体内数据赋值(简单法)

    L.elment[0] = 1;
    L.elment[1] = 2;
    L.elment[2] = 3;
    L.elment[3] = 4;
    L.elment[4] = 5;

for循环

      for (int i = 0; i < 10; i++)
    {
        L.elment[i] = i+1;
    }

3.结构体内输出数据

  for (int i = 0; i < 10; i++)
    {
        //不会打印空值
        if (L.elment[i]>0) {
            printf("element[%d] = %d\n",i, L.elment[i]);
        }
    }

二.char数组指针类型的处理

1.结构体初始化

   //结构体初始化
   MyList L;
   L.length = LENGTH;
   L.elment = (char*)malloc(L.length * sizeof(char));

2.结构体内数据赋值

    //结构体赋值
    for (int i = 0; i < LENGTH; i++)
    {
        *(L.elment + i) = 'A' + i;
    }

3.结构体内输出数据

   //打印结构体中的值
    for (int i = 0; i < LENGTH; i++)
    {
        if (*(L.elment + i) > 0) {
            printf("elment[%d] = %c\n", i, *(L.elment + i));
        }
    }

三.全部代码

1. char数组

// 010.顺序表_004.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#define MAXSIZE 10

typedef struct SequenceList {
	// 数组的元素
	char element[MAXSIZE];
	// 数组的长度
	int length;
};

int main()
{
	// 1.初始化结构体
	SequenceList *L;
	L = (SequenceList*)malloc(sizeof(char)*MAXSIZE);
	L->length = MAXSIZE;

	// 2.存入结构体内值
	for (int i = 0; i < MAXSIZE; i++)
	{
		L->element[i] = 'a' + i;
	}

	// 3.打印结构体内的值
	for (int i = 0; i < MAXSIZE; i++)
	{
		if (*(L->element + i) > 0) {
			printf("elment[%d] = %c\n", i, *(L->element + i));
		}
	}
}

2. char数组指针

// 011.顺序表_005.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#define MAXSIZE 10

typedef struct SequenceList {
	// 数组的元素
	char *element;
	// 数组的长度
	int length;
};

int main()
{
	// 1.结构体初始化
	SequenceList L;
	L.length = MAXSIZE;
	L.element = (char*)malloc(L.length * sizeof(MAXSIZE));

	// 2.结构体内赋值
	for (int i = 0; i < MAXSIZE; i++)
	{
		*(L.element + i) = 'a' + i;
	}

	// 3.打印结构体中的值
	for (int i = 0; i < MAXSIZE; i++)
	{
		if (*(L.element + i) > 0) {
			printf("elment[%d] = %c\n", i, *(L.element + i));
		}

	}
}

结语这就是最近遇到的问题,这个问题困扰了很久,相信许多的初学者也遇到了这样的问题,但是,网上的描述根本不怎么好用,所以,希望本博主遇到的这个问题能帮助到你

总结

到此这篇关于C语言结构体中的char数组如何赋值的文章就介绍到这了,更多相关C语言结构体中char数组赋值内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解C语言中Char型指针数组与字符数组的区别

    详解C语言中Char型指针数组与字符数组的区别 1.char 类型的指针数组:每个元素都指向一个字符串,指向可以改变 char *name[3] = { "abc", "def", "gbk" }; for(int i = 0 ; i < strlen(name); i ++){ printf("%s\n", *(name+i)); //printf("%s\n", name[i]); } //指向改

  • C语言变长数组 struct中char data[0]的用法详解

    今天在看一段代码时出现了用结构体实现变长数组的写法,一开始因为忘记了这种技术,所以老觉得作者的源码有误,最后经过我深思之后,终于想起以前看过的用struct实现变长数组的技术.下面是我在网上找到的一篇讲解很清楚的文章. 在实际的编程中,我们经常需要使用变长数组,但是C语言并不支持变长的数组.此时,我们可以使用结构体的方法实现C语言变长数组. struct MyData { int nLen; char data[0];}; 在结构中,data是一个数组名:但该数组没有元素:该数组的真实地址紧随结

  • 详解C语言结构体中的char数组如何赋值

    目录 前景提示 一.char数组类型的处理 1.结构体初始化 2.结构体内数据赋值(简单法) 二.char数组指针类型的处理 1.结构体初始化 2.结构体内数据赋值 3.结构体内输出数据 三.全部代码 1.char数组 2.char数组指针 总结 前景提示 定义一个结构体,结构体中有两个变量,其中一个是char类型的数组,那么,怎么向这个数组中插入数据,打印数据呢? typedef struct SequenceList { // 数组的元素 char element[20]; // 数组的长度

  • 详解C语言结构体中的函数指针

    结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.所以,标准C中的结构体是不允许包含成员函数的,当然C++中的结构体对此进行了扩展.那么,我们在C语言的结构体中,只能通过定义函数指针的方式,用函数指针指向相应函数,以此达到调用函数的目的. 函数指针 函数类型 (*指针变量名)(形参列表):第一个括号一定不能少. "函数类型"说明函数的返回类型,由于"()"的优先级高于"*",所以指针变量名外的括号必不可少.  注意指针函数与函数指针表示

  • 详解C语言结构体,枚举,联合体的使用

    目录 一.匿名结构体 二.结构体的自引用 1.声明时不要自己引用自己 2.结构体重命名时不能使用重命名 三.结构体内存对齐规则 1.结构体内存计算 2.结构体嵌套 3.通过调整结构体成员顺序,压缩内存 四.存在内存对齐的原因 五.修改默认对齐数 六.结构体传参 七.位段 1.位段在内存中的存储 2.位段的跨平台问题 八.枚举 1.枚举的定义 2.枚举的优点 九.联合体(共用体) 1.联合体大小的计算 2.使用联合体判断计算机的大小端字节序 一.匿名结构体 struct { char name[2

  • 详解C语言结构体的定义和使用

    目录 1.1: 结构体用来干嘛? 1.2:结构体变量的基本定义格式 1.3:结构体变量的定义 1.4结构体变量的三种引用方法 2.结构体变量的使用(直接使用结构体变量) 2.1输出结果 3.使用结构体指针操作,返回总成绩最低的学生信息 3.1运行结果 总结: 1.1: 结构体用来干嘛? 生活中我们会遇到很多的表格,就比如你的学习成绩表,有姓名 ,学号,各科的成绩,总的成绩等等,这是一些不同的数据类型,我们要是在c语言中想同时使用这些不同的数据怎么办呢? 可以使用结构体变量,结构体变量在c语言中是

  • C语言结构体中内存对齐的问题理解

    目录 前言 思考 结构体在内存中开辟空间时内存对齐的规则 为什么存在内存对齐 1.平台的原因 2.性能的原因 前言 学C的同学应该知道~ 想精通C语言就不得不面对—指针与内存 续上次指针的进阶,这一章我来聊一聊C语言内存对齐的问题 学习结构体的你有没有注意过结构体向系统申请的内存为多少呢的 思考 #include<stdio.h> typedef struct s1 { char a; char b; int c; }s1; typedef struct s2 { char a; int c;

  • C++结构体中变长数组的使用问题分解刨析

    目录 1. 问题来源 2. 问题复现 2.1 初始程序 2.2 独立变长数组复现 2.3 变长数组置前复现 2.4 缓冲区溢出复现 3. 结构体变长数组使用要点 1. 问题来源 今天在结构体里面使用变长数组来封装消息体,运行程序时弹出如下错误: *** stack smashing detected ***: <unknown> terminatedAborted (core dumped) 问题已经解决,由于源程序不方便截取,现在通过一个实例来复现问题. 2. 问题复现 2.1 初始程序 #

  • 详解C语言面向对象编程中的封装

    目录 前言 一.面向对象基本概念 什么是对象? 对象与类 面向对象的编程方式 二.C语言实现面向对象 面向对象的三大特征 面向对象之封装 简介 代码实现–基础版 代码实现-进阶版 总结 前言 面向对象是一种思维方式,基本上用什么语言都是可以实现的.C语言的编程方式一般是面向过程的,但是也是可以实现面向对象的.对象是什么?什么又是面向对象?面向对象的三大特性又怎么实现,且听我细细道来. 一.面向对象基本概念 什么是对象? 此对象非彼对象,虽然有时候此对象又可以是你脑袋中的对象,那让我们从我们误解的

  • 详解C语言在STM32中的内存分配问题

    01.前言 不说废话,先上示例代码 uint8_t num_byte[4]; uint32_t num_word; const uint32_t num_word_const = 0x1234; uint32_t *point_heap; int main(void) { uint8_t num_byte_stack; static uint8_t num_byte_static; point_heap = (uint32_t *)malloc(4); *point_heap = 0x3421;

  • C语言结构体数组的定义和使用详解

    目录 介绍 结构体数组定义时初始化 补充 介绍 一个结构体变量可以存放一个学生的一组信息,可是如果有 10 个学生呢?难道要定义 10 个结构体变量吗?难道上面的程序要复制和粘贴 10 次吗? 很明显不可能,这时就要使用数组.结构体中也有数组,称为结构体数组.它与前面讲的数值型数组几乎是一模一样的,只不过需要注意的是,结构体数组的每一个元素都是一个结构体类型的变量,都包含结构体中所有的成员项. 定义结构体数组的方法很简单,同定义结构体变量是一样的,只不过将变量改成数组.或者说同前面介绍的普通数组

  • 详解C语言中动态内存管理及柔性数组的使用

    目录 一.malloc 二.free 三.calloc 四.realloc 1.realloc在扩容时的情况 2.realloc也能实现malloc功能 五.使用动态内存的常见错误 1.free空指针 2.对动态开辟的空间越界访问 3.对非动态开辟内容free 4.只free动态开辟空间的一部分 5.对同一块内存多次free 6.动态内存空间忘记释放(内存泄漏) 六.柔性数组 1.柔性数组的概念 2.柔性数组的特点 3.柔性数组的使用场景 4.柔性数组的优点 一.malloc 这个函数向堆区申请

随机推荐