b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

算子和普通凹坑尺寸介绍

电脑杂谈  发布时间:2020-05-01 08:23:06  来源:网络整理

sizeof计算结构体大小_结构体的sizeof_sizeof 结构

sizeof是C语言的关键字,用于计算当前系统中变量(或数据类型)占用的内存字节数.

sizeof不是函数,因为sizeof确实有点像一个函数,所以出现了这样一个问题sizeof计算结构体大小,sizeof有两种写法:

对于数据类型

  sizeof(数据类型);

数据类型必须放在方括号中.

sizeof 结构_sizeof计算结构体大小_结构体的sizeof

  printf("字符型变量占用的内存是=%d\n",sizeof(char));   // 输出:字符型变量占用的内存是=1
  printf("整型变量占用的内存是=%d\n",sizeof(int));   // 输出:整型变量占用的内存是=4

对于变量

  sizeof(变量名);
  sizeof 变量名;

变量名可以用括号括起来. 括号的使用更为常见. 大多数程序员都使用这种形式.

  int ii;
  printf("ii占用的内存是=%d\n",sizeof(ii));   // 输出:ii占用的内存是=4
  printf("ii占用的内存是=%d\n",sizeof ii);   // 输出:ii占用的内存是=4

sizeof计算结构体大小_结构体的sizeof_sizeof 结构

理论上,结构的每个成员都连续存储在内存中,这与数组非常相似. 但是,结构占用的内存总大小不一定等于所有成员变量占用的内存总和. 在编译器的特定实现中,为了提高内存寻址的效率,各个成员之间可能会有间隙. 使用sizeof可以获取结构占用的总大小,即sizeof(结构名称)或sizeof(结构变量名称).

示例(book90.c)

/*
 * 程序名:book90.c,此程序用于演示C语言的结构体占用内存的情况
 * 作者:C语言技术网(www.freecplus.net) 日期:20190525
*/
#include <stdio.h>
// #pragma pack(1)  # 告诉编器内存按1字节对齐。
struct st_girl
{
  char name[50];     // 姓名
  int  age;          // 年龄
  int  height;       // 身高,单位:厘米cm
  char sc[30];       // 身材,火辣;普通;飞机场。
  char yz[30];       // 颜值,漂亮;一般;歪瓜裂枣。
};
int main()
{
  struct st_girl queen;
  printf("sizeof(struct st_girl) %d\n",sizeof(struct st_girl));
  printf("sizeof(queen) %d\n",sizeof(queen));
}

运行效果

在这里插入图片描述

结构体的sizeof_sizeof 结构_sizeof计算结构体大小

从上面的示例中可以看到,struct st_girl的所有成员变量占用的内存为50 + 4 + 4 + 30 + 30 = 118,但是结构占用的内存为120.

请注意,C语言提供了一种对齐结构成员内存的方法sizeof计算结构体大小,因此,在结构成员变量的内存之间没有间隙,只需启用#pragma pack(1)代码即可.

  printf("sizeof(void)=%d\n",sizeof(void));  // 输出sizeof(void)=1

上面的代码在某些编译器中可能不会通过.

void是无值或空类型. 存储空间的类型未知,并且编译器无法确定其大小. void无法声明变量,无法编译以下代码:

sizeof计算结构体大小_结构体的sizeof_sizeof 结构

  void vv;

但是以下代码正确:

  void *pv;
  printf("sizeof(void*)=%d\n",sizeof(pv));   // 输出sizeof(void)=8

pv是一个空指针. 在64位操作系统中,指针变量占用的内存大小为8,这与下面相同.

如果将字符串的地址(例如char strname [21])传递给子函数,则子函数将使用字符指针(例如char * pstr)来存储输入字符串的地址(如果位于)子函数sizeof(pstr)的值不是字符串所占用的内存字节数,而是字符指针变量所占用的内存字节数(8字节).

因此,除非字符串的长度也作为参数传递到子函数中,否则无法在子函数中初始化传入的字符串.

如果将结构(例如struct st_girl stgirl的结构)的地址传递给子函数,则子函数将使用结构指针(例如struct st_girl * pgril)存储传入结构的地址(如果它位于子函数sizeof(pgirl),不是结构占用的内存字节数,而是结构指针变量占用的内存字节数(8个字节). 正确的用法是使用sizeof(struct st_girl).


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-195062-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      每日福利
      热点图片
      拼命载入中...