结构体中共同体数据调用:
#include "stdio.h"
typedef struct mm_route_buf_env
{
unsigned char opcode;
unsigned char info;
union
{
unsigned char src;
unsigned char dst;
} u_addr;
unsigned char app_key_lid;
unsigned char mdl_lid;
} mm_route_buf_env_t;
int main()
{
mm_route_buf_env_t x,*q;
q = &x;
x.u_addr.dst = 1;
printf("%d",q->u_addr.dst);
return 0;
}
在C和C++中,你可以在结构体(struct)中定义共用体(union),以创建更复杂的数据结构。这种结构被称为嵌套结构,允许你在结构体中包含多个共用体,以便根据需要选择其中一个共用体来存储数据。以下是一个示例:
#include <stdio.h>
// 定义一个共用体
union Data {
int integer;
double decimal;
char text[20];
};
// 定义一个结构体,包含两个共用体
struct ComplexData {
int type; // 用于标识当前使用的共用体
union Data data; // 共用体成员
};
int main() {
// 创建一个结构体实例
struct ComplexData person;
// 设置类型标识和共用体成员
person.type = 1; // 1表示整数
person.data.integer = 42;
// 打印共用体数据
if (person.type == 1) {
printf("Integer: %d\n", person.data.integer);
} else if (person.type == 2) {
printf("Decimal: %f\n", person.data.decimal);
} else {
printf("Text: %s\n", person.data.text);
}
return 0;
}
在上面的示例中,我们定义了一个包含两个共用体的结构体
ComplexData
。ComplexData
结构体包含一个整数类型的type
成员,用于标识当前使用的共用体。根据type
的值,我们可以选择存储整数、浮点数或文本数据。通过嵌套结构体和共用体,你可以创建更灵活的数据结构,以存储不同类型的数据,并根据需要访问它们。这在处理复杂的数据或数据包格式时非常有用。但要确保在访问共用体数据时始终知道正确的类型标识,以避免数据类型不匹配的问题。
指针的自加
#include "stdio.h"
int main()
{
int a[] = {1,2,3,4,5};
int *p = a;
int x = *++p + (*++p);
printf("%d",x);
return 0;
}
结果为 5,可用于使用指针指向一段地址时可对地址中的多个数据进行同时操作
指针的自增操作是指将指针变量指向的内存地址增加(或减少,如果是自减)一个特定的偏移量,以使指针指向下一个(或前一个)存储单元。这通常用于遍历数组、链表或其他数据结构中的元素。
在C和C++等编程语言中,指针的自增通常通过使用
++
运算符来执行。以下是一些示例:
- 递增指向整数数组元素的指针:
int numbers[] = {1, 2, 3, 4, 5};
int *ptr = numbers; // 将指针指向数组的第一个元素
// 使用自增操作遍历数组
for (int i = 0; i < 5; i++) {
printf("%d ", *ptr);
ptr++; // 将指针指向下一个数组元素
}
在上面的示例中,
ptr
是一个指向整数的指针,通过不断执行ptr++
来遍历整数数组中的元素。
- 递增指向结构体链表节点的指针:
#include <stdio.h>
struct Node {
int data;
struct Node *next;
};
int main() {
struct Node node1 = {1, NULL};
struct Node node2 = {2, NULL};
struct Node node3 = {3, NULL};
node1.next = &node2;
node2.next = &node3;
struct Node *current = &node1;
// 遍历链表
while (current != NULL) {
printf("%d ", current->data);
current = current->next; // 将指针指向下一个节点
}
return 0;
}
在上面的示例中,
current
是一个指向链表节点的指针,通过不断执行current = current->next
来遍历链表中的节点。指针的自增和自减操作是在C和C++等低级编程语言中非常常见和有用的操作,但要谨慎使用,以避免访问未分配或越界的内存,导致程序错误。