-
2021-05-21 01:34:49
假设结构体为:
typedef struct
{
unsigned char ucType;
char cProgramID[32];
char cRegionGroupID[32];
unsigned char ucPlayStatus;
unsigned char ucMonitorStatus;
}InsertProgramQueryCondition;
求一段用循环遍历该结构体的c代码。
解决方案
6
你是要遍历结构体还是要遍历放了很多结构体变量的一个容器?
8
本人猜,题主是要这样遍历结构体内的每个字节吧
InsertProgramQueryCondition ST
char *p = (char*)(&St);
for (int i =0; i
{
//这里 *p 就是要的内容
p++;
}
3
应该说对于结构体内部进行循环遍历不易做到,使用一些变通的方法或许能够做到,但最主要的是这样做毫无意义。
3
C,C++ 没有直接的方法
按照 成员变量的类型,通过循环访问他。
你不是要做调试程序吧
那是对每个类型的类型信息,做了记录和封装
所以,才能一一看到。
3
引用:
Quote: 引用:
你是要遍历结构体还是要遍历放了很多结构体变量的一个容器?
本人就是想给结构体中的每一个变量赋值,但是想用循环来遍历结构体,不然依次赋值感觉代码很冗余
你有不止一种类型的变量,怎么样用循环赋值呢?
再说了,即使可以做到,一个结构体又能有多少变量。何必把简单的问题复杂化。
CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C语言遍历结构体!
更多相关内容 -
C语言中结构体偏移及结构体成员变量访问方式的问题讨论
2021-01-01 05:31:26c语言结构体偏移 示例1 我们先来定义一下需求: 已知结构体类型定义如下: struct node_t{ char a; int b; int c; }; 且结构体1Byte对齐 #pragma pack(1) 求: 结构体struct node_t中成员变量c的偏移。 注:... -
C语言 循环结构体设计
2017-10-21 09:42:005.1 为什么需要循环控制 5.2 用while语句实现循环 5.3 用do---while语句实现循环 5.4 用for 语句实现循环 5.5 循环的嵌套 5.6 几种循环的比较 5.7 改变循环执行的状态 5.8 循环程序举例 -
C语言遍历结构体数组
2020-12-23 01:23:27匿名用户1级2015-05-07 回答//Win32Project1.cpp:定义应用程序的入口点。//#include"stdafx.h"#include"Win32Project1.h"#defineMAX_LOADSTRING100//全局变量:HINSTANCEhInst;//当前实例TCHARszTitle[MAX_LOADSTRING...匿名用户
1级
2015-05-07 回答
// Win32Project1.cpp : 定义应用程序的入口点。
//
#include "stdafx.h"
#include "Win32Project1.h"
#define MAX_LOADSTRING 100
// 全局变量:
HINSTANCE hInst;// 当前实例
TCHAR szTitle[MAX_LOADSTRING];// 标题栏文本
TCHAR szWindowClass[MAX_LOADSTRING];// 主窗口类名
// 此代码模块中包含的函数的前向声明:
ATOMMyRegisterClass(HINSTANCE hInstance);
BOOLInitInstance(HINSTANCE, int);
LRESULT CALLBACKWndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACKAbout(HWND, UINT, WPARAM, LPARAM);
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPTSTR lpCmdLine,
_In_ int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: 在此放置代码。
MSG msg;
HACCEL hAccelTable;
// 初始化全局字符串
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_WIN32PROJECT1, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
// 执行应用程序初始化:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIN32PROJECT1));
// 主消息循环:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
}
//
// 函数: MyRegisterClass()
//
// 目的: 注册窗口类。
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style= CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc= WndProc;
wcex.cbClsExtra= 0;
wcex.cbWndExtra= 0;
wcex.hInstance= hInstance;
wcex.hIcon= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WIN32PROJECT1));
wcex.hCursor= LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground= (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName= MAKEINTRESOURCE(IDC_WIN32PROJECT1);
wcex.lpszClassName= szWindowClass;
wcex.hIconSm= LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
return RegisterClassEx(&wcex);
}
//
// 函数: InitInstance(HINSTANCE, int)
//
// 目的: 保存实例句柄并创建主窗口
//
// 注释:
//
// 在此函数中,我们在全局变量中保存实例句柄并
// 创建和显示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // 将实例句柄存储在全局变量中
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
//
// 函数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
// 目的: 处理主窗口的消息。
//
// WM_COMMAND- 处理应用程序菜单
// WM_PAINT- 绘制主窗口
// WM_DESTROY- 发送退出消息并返回
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 分析菜单选择:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
// “关于”框的消息处理程序。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}
-
c语言-遍历结构体里的数组元素---@颜麓
2020-12-12 16:38:19遍历结构体里的数组元素的两种方法 //设计一个描述商品的结构体,存放一个商品信息,并显示 #include<stdio.h> struct goods { char name[10];//10 int date;//4 char quality[10];//10 float price;//4 }...遍历结构体里的数组元素的三种方法
//设计一个描述商品的结构体,存放一个商品信息,并显示 #include<stdio.h> struct goods { char name[10];//10 int date;//4 char quality[10];//10 float price;//4 }; struct goods str[5]={ {"yanlu ",20201211,"514years",100}, {"achang",20201210,"309years",99}, {"jibo ",20201209,"823years",200}, {"nailiu",20201209,"823years",99}, }; int main() { struct goods *p; float max; int i; printf("name date quality price\n"); //第一种 for (p=str;p<str+4;p++) { printf("\n%s %d %s %.2f\n",p->name, p->date, p->quality, p->price); } //第二种 //p=str; //for (i=0;i<5;i++) //{ // printf("\n%s %d %s %.2f\n",p->name, p->date, p->quality, p->price); // p++; //} //第三种 //for(i=0;i<4;i++) //{ // printf("\n%s%d%s%2.f\n",str[i].name,str[i].date,str[i].quality,str[i].price); //} }
-
C语言-结构体成员遍历
2021-08-24 15:59:38C语言-结构体成员遍历 此方法试用的前提:结构体成员的数据类型相同 。话不多说,直接上手。 “结构体成员遍历”进阶版:当结构体里的成员数据类型不一样,可以计算出每个结构体成员的偏移量,并将偏移量放到一个...C语言-结构体成员遍历
大家好,我是鸟哥
此方法试用的前提:结构体成员的数据类型相同 。话不多说,直接上手。
“结构体成员遍历”进阶版:当结构体里的成员数据类型不一样,可以计算出每个结构体成员的偏移量,并将偏移量放到一个数组中,遍历数组获取偏移量后再根据偏移去获取成员变量。这样取出了不同类型的结构体,直接进行赋值取值即可。进阶版的详细实现方法会在后期的另一篇文章中说明。
问题:
假设现在有一个结构体,成员都是int类型,现在需要对结构体的成员进行赋值或者取值。
将数值1-10分别赋给结构体成员Member_0到Member_9。typedef struct { int Member_0; int Member_1; int Member_2; int Member_3; int Member_4; int Member_5; int Member_6; int Member_7; int Member_8; int Member_9; }Member_t;
问题解决思路:
给结构体的成员赋值,最基本的方法就是结构体直接赋值,具体的几种实现方法如下。- 结构体初始化赋值
Member_t Member = { 1,2,3,4,5,6,7,8,9,10 }; //结构体初始化赋值
- 单一成员赋值
Member.Member_0 = 1; //结构体成员分别赋值 Member.Member_1 = 2; Member.Member_2 = 3; Member.Member_3 = 4; Member.Member_4 = 5; Member.Member_5 = 6; Member.Member_6 = 7; Member.Member_7 = 8; Member.Member_8 = 9; Member.Member_9 = 10;
上述两种方法适用于成员较少的结构体,当成员数量很多,并且需要统一赋值操作的时候,这两种方法就显得十分繁琐,低效。
为了让编写程序更加高效,让代码篇幅更少,可扩展性强,笔者总结了几种利用指针对结构体成员统一赋值的方法。具体实现如下:
Member_t Member; //结构体命名 Member_t* P_Member = &Member; //指向结构体的指针 int* P = (int*)P_Member; //结构体指针强制转换为int类型 int i; for (i = 0; i < sizeof(Member) / sizeof(int); i++) { (*P++) = i + 1; }
我们可以定义一个int类型的指针,指针类型与结构体的成员类型保持一致,再通过强制类型转换,将结构体指针类型强制转换为int类型的指针,把指针P指向结构体指针。
注:不能直接把int类型的指针指向结构体或者结构体指针。这样的话,程序就会报错。因为结构体名字是经过typedef后的类型,而P指针是int类型,两者类型不一样,无法通过编译器的类型检查,程序会直接报错,所以不能直接将P指向结构体或者结构体指针。
int* P = &Member; //这是错误的指针访问
上述强制转化结构体指针类型的方法可以实现结构体成员的统一赋值,但是这种方法很危险,因为它避开了编译器的类型检查。
利用指针遍历结构体成员最正确安全的方法就是使用&操作符取得一个指向结构体内部int类型成员的指针P_Member->Member_0。具体实现如下:
Member_t Member; //结构体命名 Member_t* P_Member = &Member; //指向结构体的指针 int i, * P; P = &P_Member->Member_0; //int类型的指针P指向结构体的第一个成员 for (i = 0; i < sizeof(Member) / sizeof(int); i++) { (*P++) = i + 1; }
结构体成员遍历输出结果:
我的微信公众号(ID:00后开发者)从00后的角度出发,专注但不局限于分享电气、嵌入式、机器视觉以及芯片行业的算法、技术文章和最新资讯。如果想查看更多内容,可以关注我的微信公众号。 -
求解:如何遍历结构体指针
2021-05-22 12:34:34该楼层疑似违规已被系统折叠隐藏此楼查看此楼在遍历的时候出现了错误大神们帮我看看 谢谢你们/*###1.实现一个简单的Arraylist。Arraylist的功能有如下a.增加元素b.查找元素c.修改元素4.查找元素而且他是有下标的,也... -
如何在C语言中遍历结构体成员——基本方法
2019-01-08 20:00:36在C语言中遍历结构中成员; 当结构成员的类型相同(或者是所占的字节相同,如uint32和int32)时,如下所示: typedef struct { int mem0; int mem1; int mem2; int mem3; int mem4; int mem5; int mem6; int ... -
c语言-遍历结构体里的数组元素
2021-04-28 18:52:53遍历结构体里的数组元素的三种方法 //设计一个描述商品的结构体,存放一个商品信息,并显示 #include<stdio.h> struct goods { char name[10];//10 int date;//4 char quality[10];//10 float price;//4 ... -
【C语言】结构体数组:查找图书
2021-11-20 11:54:04【C语言】结构体数组:查找图书 #include<stdio.h> struct student { double xuehao,a; char xingming[100],zuozhe[100]; int nian,yue,ri; }s1[100]; int main() { int n,i; double chazhao; ... -
C语言遍历文件夹(Windows下),读取文件信息至结构体,然后保存至文件
2021-11-17 15:52:11C语言遍历文件夹 首先首先根据参考资料中文章理解遍历文件夹的方法。 #include <stdio.h> #include <string.h> #include <dirent.h> void myfilerecursive(char *path); int main() { // ... -
C语言结构体,主要后面那个循环不懂
2021-05-22 07:08:14所以你应该已经弄懂了 struct 的定义和 typedef 是怎么回事吧。 那么,在 main 中你定义了 a、b、c 这三个 ... 那么整个 while 就是利用 p 指针,遍历了一遍 a b c 节点链接而成的链表(对,这样的结构就叫“链表”) -
c语言结构体学习整理(结构体初始化,结构体指针)
2018-11-01 20:22:12c语言中交换两个结构体的值(结构体指针) 1关于语言的结构体: 首先我们为什么要用到结构体,我们都已经学了很多int char …等类型还学到了同类型元素构成的数组,以及取上述类型的指针,在一些小应用可以灵活... -
C语言遍历结构数组的5种方式!!!
2021-01-17 15:52:42struct book { int amount; double price; char * name; }; struct book bo[3] = { { 2, 53.2, "雾都孤儿" }, { 1, 53.2, "斗破苍穹" }, { 2, 53.2,"双城记" } ... -
c语言遍历文件内容_c语言入门 第二十七章 文件操作
2020-11-21 16:25:41在c语言当中操作文件非常的简单,只需要找到硬盘上文件的指针位置,然后就可以写入数据,读取数据 c语言在 stdio.h 头文件当中定义了一个新的类型 FILE ,这是一个结构体,代表的就是硬盘上的文件,我们对于 FILE 结构体... -
C语言——结构体&位域
2020-02-06 00:33:57//结构体B中包含指向结构体A的指针,在A声明完后,B也随之进行声明 struct B { struct A *partner; //other members; }; 三:初始化 #include struct Books { char title[50]; char author[50]; ... -
C语言中结构体详解
2020-12-02 14:38:32C语言中结构体详解 1.1 结构体的相关概念 结构体: 将多个相同或不同类型的数据存在一块连续的内存空间 说明: 结构体和数组一样,同属于符合类型的数据; 结构体和数组的区别:数组用于保存相同类型的数据,而结构体通常... -
C语言结构体当中数组的遍历、求最大最小值和简单的计算
2021-09-15 21:54:21C语言结构体当中数组的遍历、求最大最小值和简单的计算 最近我的一个朋友问我,使用结构体来计算数组当中的数值的时候,要么报错,要么运行的时候出现不是数组当中的值(图已欠费) 废话不多说,直接干货走起(算不... -
C语言实现静态数据表,遇到结构体赋值完成后遍历输出结构体乱码
2021-10-05 21:36:55自己赋值结构体数据后发现数据莫名其妙自己改变了。仔细检查下代码才发现是变量超出函数作用域会被系统自动回收。 问题代码如下: #include <stdio.h> #include <windows.h> #include <string.h&... -
c语言 遍历搜索文件夹(获取文件夹中所有内容)
2021-05-23 12:14:27需要用来存储文件各种信息的结构体:struct_finddata_t 及查找函数:_findfirst、_findnext和_fineclose。[1] _finddata_t结构体struct _finddata_t{unsignedattrib;time_ttime_create;time_ttime_access;time_ttime... -
c语言遍历文件内容_学习C语言课程设计
2020-11-21 09:17:59在C语言学习了一段时间之后,我们开始入了课程设计。初学了一些简单的语法之后,感觉要完成一项工程还是有些困难的。 听说在写课程设计时,比起一下子打出来完,不如分模块,分功能的有步骤的去写。 ... -
VC++结构体成员变量和方法
2015-04-25 16:39:02VC++结构体成员变量和方法,实现结构体成员调用 -
C语言实验结构体数组实现对学生信息的增删改查
2021-12-03 12:55:17设计一种结构体,用来保存学生信息。假定学生的总人数不超过100人。 学生的信息包括学号(的整数)、姓名(长度不超过19的字符串)、三科成绩(整数)以及综合成绩(实数)除综合成绩外,各项数据均由键盘输入。综合... -
C语言遍历文件目录:readdir,opendir
2018-12-04 15:12:25环境:Linux系统 头文件: #include<sys/types.h> #include<dirent.h> 一、opendir 原型 DIR* opendir (const char * path ...DIR*,DIR结构体类似于FILE,是一个内部结构,以下... -
c语言 结构体数组的赋值
2021-10-17 11:07:40c语言 结构体数组的赋值 //**创建结构体** #include<stdio.h> struct Class{ int id; char name[10]; }; //******结构体数组的赋值 int main(){ int m; //定义结构体数组的长度所需变量 int i; printf(... -
C语言对结构体数组进行赋值打印实例
2020-05-14 11:24:131. 定义一个学生结构体数组有4个学生,通过键盘给他的成员赋值,然后遍历打印 这里的数据类型是 struct student定义一个结构体数组和定义一个普通数据类型,使用方法也类似,只要明白C语言中的数据类型这个概念就行... -
图书管理系统c语言 结构体数组实现
2017-02-14 17:02:23图书管理系统是数据结构常见的课设题,在这里写一个简单的c语言实现代码。没有使用指针,链表。第一次需要写一些内容到程序中,之后注释掉creat(),creat2()两个函数即可从文件中读取。 #include #include #...