文档总结20-C语言中的二维指针和结构体
来源:互联网 发布:视频剪辑for mac 编辑:程序博客网 时间:2024/05/17 23:19
一、二维数组与二维指针
1. volatile
volatile是一个类型修饰符(type specifier),就像大家更熟悉的const一样,它是被设计用来修饰被不同线程访问和修改的变量。volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。
volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。
2. 二维数组
数组名是数组第一个元素的首地址,也就是arr == &arr[0]
arr[0]是第二维的数组名也就是arr[0] == &arr[0][0]
arr[0][0]是元素名,与地址无关
3.一重指针和二维数组匹配
指针数组、数组指针和二维数组匹配
二重指针:指向的对象是一个指针,该指针指向int类型
定义指针
int **p,*p1;
绑定
p = &p1;
二、结构体
基本数据结构,数据和一种数据结构(缺点:元素单一)
结构体是一种数据结构,解决了数组里不能存放多种类型的数据这种缺陷。
#include<stdio.h>//结构体的关键字 struct infor //struct infor 是标识符,必须整体数用{ char name[50]; //(元素)成员变量(属性) char is_male; int age;}; //分号不能少 不占空间typedef struct infor S;int main(void){ printf("sizeof(S) = %d\n",sizeof(S)); 定义了一个结构体变量 S s = {"吕科", 1, 17}; //遍历元素,运算符(.)是专用于结构体变量访问各元素 printf("结构体元素:%d %d %s\n", s.is_male, s.age, s.mame); S s1; //赋值各成员变量 //.符号访问到结构体的成员变量名 strcpy(s1.male, "吕科"); s1.age = 17; s1.is_name = 1; //初始化,和数组很像,逐个赋值 S s2 = {1,2};}struct{}S; 这个S是变量名的意思;定义类型的同时给出了结构体的变量名//结构体里.号的实质//&s类型是struct st *int *p_a = (int *)&s;//float *p_b = (float *)((char *)&s+4);float *p_b = (float *)((long)&s+4);//分析:地址值转化为数字,可加减。struct st s1;//相同结构体变量之间可以相互赋值,在C++中被成为:赋值构造s1 = s;结构体数组struct st arr[3];结构体指针struct st *p;struct st s;func(&s);调用函数赋值void func(struct st *p){ p->a = 1; p->b = 3.14; p->c = 2;}
三、结构体的字节对齐规则
1、结构体变量的地址是从4字节对齐的位置开始(0,4,8,c)
2、各成员在结构体里自身要对齐
3、成员之间不满足自身对齐,需要填充(padding)
4、满足结构体自身对齐的最小倍数
默认是4字节对齐,最大的基本数据类型和这个默认值相比,取其小
#include<stdio.h>int main(){ struct str1 // 7 { int a; // 4 char b; // 1 + 1 short c; // 2 }s1; // 8 struct str2 { char a; // 1 char b; // 1 // + 2 int c; // 4 }s2; // 8 struct str3 // 6 { int a; char b; char c; // + 2 }s3; // 8 struct str4 { char a; short b; short c; }s4; //6}
阅读全文
0 0
- 文档总结20-C语言中的二维指针和结构体
- 文档总结19-C语言中的指针
- C语言中的二级指针和二维数组问题
- C语言中的二级指针和二维数组问题
- C语言中的二级指针和二维数组问题
- C语言中的二级指针和二维数组问题
- C语言--结构体中的指针
- C语言--结构体中的指针
- C语言--结构体中的指针
- C语言--结构体中的指针
- C语言中的结构体指针
- C语言中的结构体指针
- C语言结构体中的函数指针
- C语言中的结构体指针
- C语言指针、二维数组和指针
- C语言二维数组中的指针问题
- C语言中的二维数组与指针
- C语言结构体和指针
- 从头了解Gradient Boosting算法
- 数据的雪球效应:AI如何改变SaaS?
- Oracle EBS AP Invoice未付款(无法付款),但是状态为已付
- Mybatis自动生成sql语句
- 微信拉票之微信如何拉票及微信投票怎样拉票通过制作微信拉票群软件来辅助拉票
- 文档总结20-C语言中的二维指针和结构体
- 面对Java大作业的放飞自我系列
- 计算机视觉(一)
- 如何处理僵尸进程?
- 排好序的数组中,找出两数之和为m的所有组合
- windows快捷办公
- Tomcat的配置与搭配过程
- unity C#脚本生命周期
- C#部署,调用WebService详细教程