首页 > 其他分享 >C语言八股文(温故知新)

C语言八股文(温故知新)

时间:2024-08-24 22:04:32浏览次数:12  
标签:八股文 变量 int 温故知新 C语言 volatile 内存 ptr 字节

1、volatile关键字

volatile int i=10; 
int j = i; 
... 
int k = i;

volatile告诉编译器i变量是随时可能发生变化的,例如IO端口的输入值,所以每次读取i都是从i的地址中读取,而不是,当重读读取i时发现读取变量一样,调用上次的寄存器。
下面是volatile变量的几个例子:

  1. 并行设备的硬件寄存器(如:状态寄存器)

  2. 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)

  3. 多线程应用中被几个任务共享的变量 回答不出这个问题的人是不会被雇佣的。

int square(volatile int *ptr)
 { 
    return *ptr * *ptr; 
}

可以等同为下面代码

int square(volatile int *ptr)
{ 
    int a,b;
     a = *ptr;
     b = *ptr; 
    return a * b; 
}

正确的平方代码应为

int square(volatile int *ptr)
{
     int a;
     a = *ptr;
     return a * a;
 } 

2、union 联合体、共用体
结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),
共用体占用的内存等于最长的成员占用的内存
共用体使用了内存覆盖技术同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉

计算的时候需要考虑字节对齐问题:

  1. 所占空间必须是成员变量中字节最大的整数倍
  2. 每个变量类型的偏移量必须是该变量类型的整数倍
  3. 对于联合体,由于所有变量都是共用一块内存,还需注意数组占用最大内

    例如:
    Typedef union {double I;int k[5];char c;} DATE;
    在联合体中成员变量最大为 double 为 8 个字节,所以最终大小必须是 8
    的整数倍;又因为联合体是共占内存空间,即 int*5=20 字节,所以最终
    为 24 个字节

标签:八股文,变量,int,温故知新,C语言,volatile,内存,ptr,字节
From: https://www.cnblogs.com/zmq-wj/p/18378343

相关文章

  • C语言字符数组
    字符数组是一维数组的一种,是当数组中的元素类型为字符型时,称为字符数组。在这里我想讲一下字符数组的结束标志和字符串数组的输入和输出。字符数组的结束标志在C语言中,使用字符数组保存字符串时,系统会自动添加“\0”作为结束符。chararray[]="hello";//初始化字符数组上......
  • 【C语言】进程和线程详解
    目录C语言进程和线程详解1.进程和线程的对比2.进程的基本概念2.1进程的定义2.2进程的特点2.3进程的生命周期3.进程管理3.1进程创建3.2进程间通信(IPC)3.2.1管道(Pipe)4.线程的基本概念4.1线程的定义4.2线程的特点5.POSIX线程库5.1引用头文件5.2创建线程......
  • c语言解决所有认识的排序(默认升序)
    库函数(不讲武德法)intcmp(constvoid*a,constvoid*b){   return*(int*)a-*(int*)b;} 调用qsort(nums,numsize,sizeof(int),cmp;元素什么类型自己改一下就行了。可以对a,b进行操作降序或者偶奇排序。选择排序voida(int*a,intn){  for(inti=0;i<n;......
  • C语言指针详解
    指针的概念:1.指针就是个变量,用来存放地址,地址唯一标识一块内存空间。2.指针的大小是固定的4/8个字节(32位平台/64位平台)。3.指针是有类型,指针的类型决定了指针的+-整数的步长,指针解引用操作的时候的权限。4.指针的运算1.字符指针在指针的类型中我们知道有一种指针类型......
  • C语言新手小白详细教程:冒泡排序
    ......
  • C语言—从零实现猜数字游戏
    猜数字游戏游戏要求:电脑自动生成1~100的随机数。玩家猜数字,猜数字的过程中,根据猜测数据的大小给出大了或小了的反馈,直到猜对,游戏结束。本文给各位读者大大提供了函数的跳转链接是基于cplusplus.com所提供的,大家可以自行跳转以了解更多。随机数的生成  获得随机数,是......
  • c语言菱形代码(附解析)
    一些新手对打印菱形还是有点问题。接下来我就详细讲解一下如何打印菱形。源代码为#include<stdio.h>intmain(void){  intn,a=0,b=0,k=0;  inti[100]={0};//这里我们默认边长小于等于50  printf("请输入菱形的边长");  scanf("%d",&n);首先先......
  • 数据结构--排序--C语言
    文章目录数据结构---排序一、排序的概念及其运用1、排序的概念2、排序运用二、常见的排序算法1、插入排序直接插入排序:希尔排序(缩小增量排序)2、选择排序直接选择排序:堆排序3、交换排序冒泡排序快速排序将区间按照基准值划分为左右两半部分的常见方式有:快速排序优......
  • 大话C语言:第46篇 C语言项目工程化之Makefile详解
    1Makefile概述Makefile是一种用于自动化构建和管理程序的工具,以文本文件的形式存在。它主要记录了程序的编译规则、依赖关系和操作指令,使得在开发过程中能够轻松地进行代码的编译、链接和部署。Makefile文件中的命令有一定规范,一旦该文件编写好以后在Linux命令行中执行一条......
  • 【排序算法】八大排序(下)(c语言实现)(附源码)
    ......