C/C++搞不懂指针还是数组?用sizeof解释struct大小!
数组?指针?
听说c++打算废弃指针了,谁让指针这么难呢!
我的环境:
>uname -a
CYGWIN_NT-10.0-WOW DESKTOP-499IG24 2.10.0(0.325/5/3) 2018-02-02 15:21 i686 Cygwin
可见为32bit内核,也就是指针所占空间的sizeof为4.
那么这段程序:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>/*main函数*/
int main(int argc, char**argv)
{char s1[] = "abcdefg";char s2[] = {'a','b','c','d','e','f','g'};char s3[] = {"abcdefg"};char *s4 = "abcdefg";//char *s5 = {'a','b','c','d','e','f','g'};//errorchar *s6 = {"abcdefg"};printf("s:%s, length:%2d, sizeof:%2d\n",s1,strlen(s1),sizeof(s1));printf("s:%s, length:%2d, sizeof:%2d\n",s2,strlen(s2),sizeof(s2));printf("s:%s, length:%2d, sizeof:%2d\n",s3,strlen(s3),sizeof(s3));printf("s:%s, length:%2d, sizeof:%2d\n",s4,strlen(s4),sizeof(s4));//printf("s:%s, length:%2d, sizeof:%2d\n",s5,strlen(s5),sizeof(s5));//errorprintf("s:%s, length:%2d, sizeof:%2d\n",s6,strlen(s6),sizeof(s6));s1[0] = 'z';s2[0] = 'z';s3[0] = 'z';//s4[0] = 'z';//error//s5[0] = 'z';//error//s6[0] = 'z';//errorreturn 1;
}
的输出为:
>gcc string.c
>a.exe
s:abcdefg, length: 7, sizeof: 8
s:abcdefgabcdefg, length:14, sizeof: 7
s:abcdefg, length: 7, sizeof: 8
s:abcdefg, length: 7, sizeof: 4
s:abcdefg, length: 7, sizeof: 4
那么这几个的sizeof为什么不一样呢?
32bit系统内核的指针大小为4,后面的两个4不难解释,上面的两个8可以解释为自动补齐(类似于struct,struct是按照最大字节数补齐),而大小为7的则是对应的数组。
sizeof(结构体)
一下均采用如下程序打印:
printf("%d+%d+%d+%d = %d\n",sizeof(int),sizeof(char),sizeof(float),sizeof(double),sizeof(S));
需要搞明白的是struct的自动对齐机制:
例1:
struct{int a;char ch;float f;double d;
}S;
输出结果为:
>gcc string.c
>a.exe
4+1+4+8 = 24
例2:
struct{int a;char ch;float f;
}S;
结果:
>gcc string.c
>a.exe
4+1+4+8 = 12
例3:
struct{float f;double d;
}S;
结果:
>gcc string.c
>a.exe
4+1+4+8 = 16
例4:
struct{int a;double d;
}S;
结果:
>gcc string.c
>a.exe
4+1+4+8 = 16
C/C++搞不懂指针还是数组?用sizeof解释struct大小!相关推荐
- C语言指针、数组与sizeof运算符
指针.数组与sizeof运算符 指针.数组与sizeof运算符 指针.数组与sizeof运算符 Sizeof是C语言的一个运算符,sizeof的作用是用来返回()里面的变量或者数据类型占用的内存字节数 ...
- 【C语言】小妹不懂指针和数组的关系?那就安排指针数组关系详解
目录 前言 一.什么是数组 二.什么是指针 三.指针变量的大小 四.数组和指针的关系 五.指针变量的自增自减运算 六.两个参数确定一个数组 七.字符型指针和字符型数组 总结 写在最后 前言 前段时间整 ...
- 新书上市 | C程序员! 这可能是你搞定指针最轻松的方式
在学习C语言的过程中,要说最大的难关,非指针莫属. 关于指针的学习,我们经常会听到下面这样的建议: "只要理解了计算机的内存和地址的概念,指针什么的就不在话下了." "因 ...
- 搞不懂的算法-排序篇1
最近在学习算法,跟着<Algorithms>这本书,可能是自己水平不够吧,看完排序算法后各种,希尔,归并,快排,堆的实现在脑子里乱成一锅粥,所以就打算大概总结一下,不求精确,全面,只想用平 ...
- redis 什么是冷数据_阿里Java三面凉凉:微服务,Redis,JVM一个都搞不懂
前言: 金九银十刚刚过去了,不知道很多小伙伴都拿到自己心仪的offer没有,我这边也收到了一个粉丝投来的消息,说看到阿里的面试真题之后人都是懵的,发现自己一窍不通,下面给大家分享我这个粉丝的经历,以及 ...
- 2小时彻底搞懂指针与共用体!
有人说,指针是C/C++的灵魂,指针的灵活性和它带来的性能优势,有着让人欲罢不能的魅力.但对初学者来说,在领悟这样的魅力之前,你首先得历经一番折磨: 指针的使用规则很多.很复杂,什么时候用指针常量.指 ...
- 【C语言进阶深度学习记录】二十五 指针与数组的本质分析二
文章目录 1 数组的访问方式 1.1 数组的访问方式代码分析 2 数组和指针不同 3 a 和 &a 的区别 3.1 指针运算的经典代码案例分析 4 数组作为函数的参数 4.1 数组作为函数参数 ...
- C语言中结构化数据(变量,指针,数组,字符串,结构体和联合)的内存表示
目录 结构化数据表示 一.内存地址: 二.全局变量和局部变量的内存布局 三.数据在内存中的表示 四.数组在内存中的表示 五.字符串在内存中的表示 六.结构和联合在内存中的表示 结构化数据表示 一.内存 ...
- C语言高级专题(4)-------指针和数组的高级应用
目录 一,指针数组与数组指针 二,函数指针 三,typedef关键字 四,二重指针 五,二维数组 一,指针数组与数组指针 1.字面意思来理解指针数组与数组指针 指针数组的实质是一个数组,这个数组中存储 ...
最新文章
- 数据蒋堂 | JOIN运算剖析
- 操作系统 第四章【存储器管理】【MOOC答案】
- 你的 Docker 应用是安全的吗?
- Python + GitHub Actions 实现 CSDN 自动签到与抽奖(非 selenium 版本)
- linux中写脚本不能写中文,Linux系统中Sublime Text无法输入中文怎么办?
- edm邮件直投_EDM邮件直投专家
- 51aspx技术文章汇总搜集
- 体操冠军江钰源:妈妈你不要去讨饭了
- html5——3D转换
- Python 函数(类)的装饰器与闭包
- flow-shop调度问题、job shop调度问题、open shop调度问题 是什么 区别
- 排查链接是否失效_【知了堂信安笔记】Linux入侵排查
- 技术分享——SSM图书馆预约占座系统
- 研磨设计模式笔记之简单工厂模式
- 机械革命Z2 键盘失灵
- 去掉串口硬盘的安全删除硬件图标
- P2P网贷行业“担保代偿”模式的业务发展及整改方案
- Perl中use strict
- 阿里云centos镜像下载
- 根据一段时间区间,按月份拆分成多个时间段