数组?指针?

听说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大小!相关推荐

  1. C语言指针、数组与sizeof运算符

    指针.数组与sizeof运算符 指针.数组与sizeof运算符 指针.数组与sizeof运算符 Sizeof是C语言的一个运算符,sizeof的作用是用来返回()里面的变量或者数据类型占用的内存字节数 ...

  2. 【C语言】小妹不懂指针和数组的关系?那就安排指针数组关系详解

    目录 前言 一.什么是数组 二.什么是指针 三.指针变量的大小 四.数组和指针的关系 五.指针变量的自增自减运算 六.两个参数确定一个数组 七.字符型指针和字符型数组 总结 写在最后 前言 前段时间整 ...

  3. 新书上市 | C程序员! 这可能是你搞定指针最轻松的方式

    在学习C语言的过程中,要说最大的难关,非指针莫属. 关于指针的学习,我们经常会听到下面这样的建议: "只要理解了计算机的内存和地址的概念,指针什么的就不在话下了." "因 ...

  4. 搞不懂的算法-排序篇1

    最近在学习算法,跟着<Algorithms>这本书,可能是自己水平不够吧,看完排序算法后各种,希尔,归并,快排,堆的实现在脑子里乱成一锅粥,所以就打算大概总结一下,不求精确,全面,只想用平 ...

  5. redis 什么是冷数据_阿里Java三面凉凉:微服务,Redis,JVM一个都搞不懂

    前言: 金九银十刚刚过去了,不知道很多小伙伴都拿到自己心仪的offer没有,我这边也收到了一个粉丝投来的消息,说看到阿里的面试真题之后人都是懵的,发现自己一窍不通,下面给大家分享我这个粉丝的经历,以及 ...

  6. 2小时彻底搞懂指针与共用体!

    有人说,指针是C/C++的灵魂,指针的灵活性和它带来的性能优势,有着让人欲罢不能的魅力.但对初学者来说,在领悟这样的魅力之前,你首先得历经一番折磨: 指针的使用规则很多.很复杂,什么时候用指针常量.指 ...

  7. 【C语言进阶深度学习记录】二十五 指针与数组的本质分析二

    文章目录 1 数组的访问方式 1.1 数组的访问方式代码分析 2 数组和指针不同 3 a 和 &a 的区别 3.1 指针运算的经典代码案例分析 4 数组作为函数的参数 4.1 数组作为函数参数 ...

  8. C语言中结构化数据(变量,指针,数组,字符串,结构体和联合)的内存表示

    目录 结构化数据表示 一.内存地址: 二.全局变量和局部变量的内存布局 三.数据在内存中的表示 四.数组在内存中的表示 五.字符串在内存中的表示 六.结构和联合在内存中的表示 结构化数据表示 一.内存 ...

  9. C语言高级专题(4)-------指针和数组的高级应用

    目录 一,指针数组与数组指针 二,函数指针 三,typedef关键字 四,二重指针 五,二维数组 一,指针数组与数组指针 1.字面意思来理解指针数组与数组指针 指针数组的实质是一个数组,这个数组中存储 ...

最新文章

  1. 数据蒋堂 | JOIN运算剖析
  2. 操作系统 第四章【存储器管理】【MOOC答案】
  3. 你的 Docker 应用是安全的吗?
  4. Python + GitHub Actions 实现 CSDN 自动签到与抽奖(非 selenium 版本)
  5. linux中写脚本不能写中文,Linux系统中Sublime Text无法输入中文怎么办?
  6. edm邮件直投_EDM邮件直投专家
  7. 51aspx技术文章汇总搜集
  8. 体操冠军江钰源:妈妈你不要去讨饭了
  9. html5——3D转换
  10. Python 函数(类)的装饰器与闭包
  11. flow-shop调度问题、job shop调度问题、open shop调度问题 是什么 区别
  12. 排查链接是否失效_【知了堂信安笔记】Linux入侵排查
  13. 技术分享——SSM图书馆预约占座系统
  14. 研磨设计模式笔记之简单工厂模式
  15. 机械革命Z2 键盘失灵
  16. 去掉串口硬盘的安全删除硬件图标
  17. P2P网贷行业“担保代偿”模式的业务发展及整改方案
  18. Perl中use strict
  19. 阿里云centos镜像下载
  20. 根据一段时间区间,按月份拆分成多个时间段

热门文章

  1. C++获取当前所有进程的完整路径
  2. git 无法提交空目录
  3. 面向对象2(待补充)
  4. 原生JS替代jQuery的各种方法汇总
  5. Asp.Net MVC 身份验证-Forms
  6. 【pyhon】nvshens图片批量下载爬虫1.01
  7. HTML基础(一):常用标签1
  8. php 生成饼状图,折线图,条形图 通用类
  9. WF+WCF+WPF第三天-WF实现一个软件自动测试框架
  10. android studio 经验