当前位置: 首页 > ops >正文

Day04_C语言基础数据结构重点复习笔记20250618

1.什么是计算机的大小端存储?

答:大端是数据的高位字节存储在低地址,低位字节存储在高地址,网络协议(如TCP/IP)通常采用大端序(称为“网络字节序”)。例如:32位整数 0x12345678 在内存中的存储(地址从左到右递增):

地址:0x100  0x101  0x102  0x103
数据: 12       34        56        78
数据的低位字节存储在低地址,高位字节存储在高地址。x86、ARM等常见CPU默认采用小端序。32位整数 同一整数 0x12345678 在小端下的存储:

地址:0x100  0x101  0x102  0x103
数据: 78        56        34         12

2.如何判断大小端存储?(如何分辨如上图所示)

3.arr和&arr的区别

01.&arr 表示整个数组的地址,它的类型是指向整个数组的指针。尽管 &arr 和 arr 的数值相同,但它们的类型不同,指针运算的步长也不同。

02.&arr 和 arr 的数值相同,都指向数组起始位置。
arr + 1 是指向下一个元素的地址,由于 int 类型通常占 4 字节,所以地址偏移 4 字节。
&arr + 1 是指向下一个同类型数组的地址,偏移量是整个数组的大小,即 5 * 4 = 20 字节。

arr是数组的首地址,需要用一级指针指向

&arr是整个数组的地址,需要用二级指针指向

4.解释数组指针、指针数组、函数指针和指针函数的区别

01:数组指针
定义:数组指针是指向数组的指针,它指向的是一个数组,其类型是指向特定类型和长度数组的指针。
语法:type (*ptr)[size];,其中 type 是数组元素的类型,size 是数组的长度,ptr 是数组指针变量名。

解释:ptr 是一个数组指针,指向 arr 数组。使用 (*ptr)[i] 来访问数组元素,*ptr 先解引用得到数组,再通过 [i] 访问对应元素。

02.指针数组

定义:指针数组是一个数组,数组中的每个元素都是指针。
语法:type *arr[size];,其中 type 是指针指向的数据类型,size 是数组的长度,arr 是指针数组名。

解释:ptr_arr 是一个指针数组,数组中的每个元素都是 int 类型的指针,分别指向 a、b、c 变量。通过 *ptr_arr[i] 解引用指针访问对应变量的值。

03.函数指针

定义:函数指针是指向函数的指针,它存储的是函数的入口地址,可以通过函数指针调用函数。
语法:return_type (*ptr)(parameter_list);,其中 return_type 是函数的返回类型,parameter_list 是函数的参数列表,ptr 是函数指针变量名。
解释:func_ptr 是一个函数指针,指向 add 函数。可以像调用普通函数一样使用 func_ptr(3, 4) 来调用 add 函数。

04.指针函数

定义:指针函数是返回指针的函数,即函数的返回值是一个指针。
语法:type *func_name(parameter_list);,其中 type 是指针指向的数据类型,func_name 是函数名,parameter_list 是函数的参数列表。
解释:get_array 是一个指针函数,返回一个指向 int 数组的指针。在 main 函数中接收该指针并通过它访问数组元素。

数组指针:本质是指针,指向一个数组。
指针数组:本质是数组,数组元素为指针。
函数指针:本质是指针,指向一个函数。
指针函数:本质是函数,返回值为指针。

5.char str[]="hello\01"; printf("strlen(str)");的结果

输入结果为:6

解析:

在字符数组 str 中,字符依次为 'h'、'e'、'l'、'l'、'o'、'\01',接着是字符串结束符 '\0'。由于 \01 并非字符串结束符,strlen 函数会把它当作普通字符计数。所以,str 中有效字符有 6 个,strlen(str) 的结果为 6。

http://www.xdnf.cn/news/14480.html

相关文章:

  • 反转链表二--LeetCode
  • Neo4j 入门到精通(Cypher语言详解)
  • 前端部署更新后,如何优雅地通知用户刷新页面?
  • OpenCV——图像形态学
  • Arrays.asList() 的不可变陷阱:问题、原理与解决方案
  • 秋招是开发算法一起准备,还是只准备一个
  • 技能系统详解(1)——技能
  • mysql 学习
  • 45-Oracle 索引的新建与重建
  • 6-16阿里前端面试记录
  • RAG 架构地基工程-Retrieval 模块的系统设计分享
  • 学习STC51单片机41(芯片为STC89C52RCRC)智能小车8(测速显示到OLED显示屏)
  • git最常用命令
  • RISC-V向量扩展与GPU协处理:开源加速器设计新范式——对比NVDLA与香山架构的指令集融合方案
  • 汽车 CDC威胁分析与风险评估
  • HTTP 请求中的 `Content-Type` 类型详解及前后端示例(Vue + Spring Boot)
  • 腾讯云国际站缩容:策略、考量与实践
  • Vue-7-前端框架Vue之应用基础从Vue2语法到Vue3语法的演变
  • C/C++中的位段(Bit-field)是什么?
  • 单片机 - STM32读取GPIO某一位时为什么不能直接与1判断为高电平?
  • 【开源工具】Windows屏幕控制大师:息屏+亮度调节+快捷键一体化解决方案
  • Day03_数据结构(顺序结构单向链表单向循环链表双向链表双向循环链表)
  • 【一天一个知识点】RAG(Retrieval-Augmented Generation,检索增强生成)构建的第一步
  • ARIMA 模型
  • Linux运维新人自用笔记(部署 ​​LAMP:Linux + Apache + MySQL + PHP、部署discuz论坛)
  • 内存泄漏到底是个什么东西?如何避免内存泄漏
  • 楞伽经怎么读
  • 23种设计模式图解
  • ragflow中的pyicu安装与测试
  • 基于YOLOv8+Deepface的人脸检测与识别系统