首页 > 其他分享 >c基础

c基础

时间:2023-02-10 23:22:41浏览次数:30  
标签:123456 const 基础 pcb sizeof pca 指针

1. const常量与宏定义常量标识符

(1) 编译器处理方式时间不同
     define宏是在预处理阶段展开;
     const常量是编译运行阶段使用;

(2) 类型和安全检查不同
     define宏没有类型,不做任何类型检查,仅仅是展开;
     const常量有具体的类型,在编译阶段会执行类型检查;

(3) 存储方式不同
     define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存;
     const常量会在内存中分配(可以是堆中也可以是栈中);

2. const变量

  1. 总结,const全局变量存储在全局存储空间,其值只有可读属性,不能修改;
  2. const局部变量存储在堆栈中,可通过指针修改其值;
  3. const变量在预处理时处理,编译器只对其值读取一次(这也是为什么内存中的值实际被修改时,编译器print的值仍为原来的值)

https://blog.csdn.net/a3125504x/article/details/78835973

 

4. 内存划分

内存区化为四个部分,分别保存 代码段、全局(静态)变量区、栈、堆

 

 https://blog.csdn.net/MQ0522/article/details/114823770

 

 3. sizeof

  char ca[] = {"123456"};
  char *pca = "123456";
printf("sizeof(ca)=%d,sizeof(pca)=%d,sizeof(*pca)=%d\n",sizeof(ca),sizeof(pca),sizeof(*pca));
  
   char cb[3][6] = {"123456","123456","123456"};
   char *pcb[] = {"123456","123456","123456"};
printf("sizeof(cb)=%d,sizeof(pcb)=%d,sizeof(*pcb)=%d,sizeof(**pcb)=%d\n",sizeof(cb),sizeof(pcb),sizeof(*pcb),sizeof(**pcb)); 

//32位
$ gcc sz.c -o sz -m32
[nereus@nereusp cpp]$ ./sz
sizeof(ca)=7,sizeof(pca)=4,sizeof(*pca)=1
sizeof(cb)=18,sizeof(pcb)=12,sizeof(*pcb)=4,sizeof(**pcb)=1

//64位
$ gcc sz.c -o sz
$ ./sz
sizeof(ca)=7,sizeof(pca)=8,sizeof(*pca)=1
sizeof(cb)=18,sizeof(pcb)=24,sizeof(*pcb)=8,sizeof(**pcb)=1

sizeof(数组名)返回的是数组的大小

sizeof(ca)=7,注意此处包含一个结束符
sizeof(cb)=18,

sizeof(一维数组指针)返回的是数组单个元素指针的大小,即系统指针的长度,32位系统为4,64位系统位8

64位:sizeof(pca)=8,32位:sizeof(pca)=4

sizeof(*一维数组指针)返回的是数组单个元素对应类型的大小

sizeof(*pca)=1,char的大小

sizeof(二维数组指针)返回的是二维数组行指针的大小,32位系统为行数×4,64位系统位行数×8

sizeof(pcb)等同于sizeof(pcb[0])、sizeof(pcb[1])、sizeof(pcb[2])

64位:sizeof(pcb)=24,3行×8,注意二维数组每一行的结尾没有结束符'\0',所以是行长度为8

32位:sizeof(pcb)=12,3行×4,

sizeof(*二维数组指针)返回的是系统指针的长度,32位系统为4,64位系统位8

64位:sizeof(pcb)=8,32位:sizeof(pcb)=4

sizeof(**二维数组指针)返回的是数组单个元素指针的大小,即char的大小

sizeof(**pcb)=1,

 

https://blog.csdn.net/Namcodream521/article/details/85315955

 

标签:123456,const,基础,pcb,sizeof,pca,指针
From: https://www.cnblogs.com/tiange-137/p/17110349.html

相关文章

  • 从0到1一步一步玩转openEuler--10 openEuler基础配置-设置kdump
    10openEuler基础配置-设置kdump10.1设置kdump本节介绍如何设置kdump预留内存及修改kdump配置文件参数。10.1.1设置kdump预留内存10.1.1.1预留内存参数格式kdump预......
  • java反序列化基础
    前言:最近开始学习java的序列化与反序列化,现在从原生的序列化与反序列化开始,小小的记录一下参考文章:https://blog.csdn.net/mocas_wang/article/details/10762101001.什么......
  • 【蓝桥杯基础题】2020年省赛填空题—回文日期
    一、题目背景本题为2020年省赛填空题C/C++A组第7题C/C++B组第7题JavaA组第7题二、题目描述1.问题描述2020年春节期间,有一个特殊的日期引起了大家的注意:2020......
  • 关于Java基础复习-第三天的复习总结
    1、流程控制语句(应用)在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执行流程。而且,很多时候要通过控制语句的执行顺......
  • 关于Java基础-第四天的复习总结
    1.数组1.1什么是数组【理解】数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致。1.2数组定义格式【记忆】1.2.1第一种数据类型[]数组名示例:int[]......
  • 关于Java基础-第五天的复习笔记
    1.方法概述1.1方法的概念(理解)方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集注意:方法必须先创建才可以使用,该过程成为方法定义......
  • 关于Java基础复习-第二天的总结笔记
    0、类型转换问题类型转换(理解)在Java中,会存在不同类型的数据需要一起参与运算,所以这些数据类型之间是需要相互转换的,分为两种情况:自动类型转换和强制类型转换。自动类型......
  • K8S基础
    一.K8S概述1.1什么是K8SKubernetes或简称k8s,是一个用于自动执行应用程序部署的系统。用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。K8S是......
  • 4.4数组是高效使用内存的基础
       数组是指多个同样数据类型的数据在内存中连续排列的形式。作为数组元素的各个数据会通过连续的编号被区分开来,这个编号称为索引(index)。指定索引后,就可以对该索引......
  • Java基础知识(关系运算符/比较运算符、逻辑运算符)
    一:关系运算符符号说明==a==b,判断a和b的值是否相等,成立为true,不成立为false。!=a!=b,判断a和b的值是否相等,成立为true,不成立为false。>a>b,判断a是否大于b,成立为true,不成立f......