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

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.如何判断大小端存储?(如何分辨如上图所示)

int a = 0x12345678;
char *p = &a;
if(*p==0x78){printf("小端存储\n");}else{printf("大端存储\n")}char c = (char)a;
if(c==0x78){printf("小端存储\n");}else{printf("大端存储\n")}union A
{int n1;short n2;
}a1;
a1.n1 = 0x01345601;
if(a1.n2==0x5601){printf("小端存储\n");}else{printf("大端存储\n")}union 
{int a;long int b;char str[13];
};    //16

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。

6.猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求原来它一共摘了多少个桃子。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int fun(int n)
{                                                   if(n==10){return 1;}return (fun(n+1)+1)*2;}
int main(int argc, const char *argv[])
{printf("猴子原来一共摘了%d个桃子\n",fun(1));return 0;
}

http://www.lryc.cn/news/571729.html

相关文章:

  • 28.行为型模式分析对比
  • linux 下 jenkins 构建 uniapp node-sass 报错
  • WPF学习(二)
  • 专题:2025信创产业新发展+AI趋势数字化研究报告|附30+份报告PDF汇总下载
  • 【OpenGL ES】不用GLSurfaceView,如何渲染图像
  • java学习笔记 IDEA的相关配置
  • 基于Android的打印系统的设计与实现
  • 深入解析 Java List 实现类的底层原理
  • 软件技术专业的出路在哪
  • 学习量子网络中的最佳路径
  • 华为云Flexus+DeepSeek征文 | 基于DeepSeek-R1强化学习的多模态AI Agent企业级应用开发实战:从理论到生产的完整解决方案
  • 使用 Visual Studio 创建安装包的完整指南
  • Saucer 页面嵌入使用举例
  • MySQL 8.0 OCP 题库完整版
  • 【Git】Git生产项目分支管理实战指南包含开发、测试、生产、bug修复和需求迭代
  • SHELL脚本(一)
  • 【微信小程序】4、SpringBoot整合WxJava生成小程序码
  • github为InfiniSynapse Docker提PR过程留档@Windows10
  • mysql 根据查询语句创建表语句
  • windows内网穿透
  • tauri+vue自动更新客户端打包配置
  • crackme009
  • 算法导论第十四章 B树与B+树:海量数据的守护者
  • TensorFlow基础之理解计算图
  • HBase RowKey设计原则.注意什么
  • [攻略本] 塞尔达系列攻略本/设定集PDF格式7.5GB
  • 探究webView与html的通讯
  • 腾讯云TCCA认证考试报名 - TDSQL数据库交付运维工程师(MySQL版)
  • 数学符号和标识中英文列表(含义与示例)
  • Vue-9-前端框架Vue之应用基础watch监视和watcheffect监视