当前位置: 首页 > 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;
}

相关文章:

  • Happy-LLM task2 第一章 NLP 基础概念(2天)
  • 27.自连接
  • 【面试题001】生产环境中如何排查MySQL CPU占用率高达100%?
  • 详细讲解Redis为什么被设计成单线程
  • C与C++中的可变参数
  • 使用@SpringJUnitConfig注解开发遇到的空指针问题
  • 工信部发布《中国工业软件产业发展研究报告(2025)》:PLM垄断加剧,Ai为国产PLM软件发展契机
  • 基于大模型的胆囊结石全周期诊疗方案研究报告
  • voronoi图,凸壳,和早已遗忘的定不定积分
  • Flutter TCP通信
  • vscode连接不上服务器问题修复
  • golang--数据类型与存储
  • D包和模块.go
  • Spring Boot + AOP + Jasypt,3 步实现敏感数据脱敏
  • Java 实现后端调用 Chromium 浏览器无头模式截图的方案
  • Java web非Maven项目中引入EasyExcel踩坑记录
  • 批量创建tmux tmux批量
  • 深入解析 Java List 实现类的底层原理
  • 腾讯云TCCA认证考试报名 - TDSQL数据库交付运维工程师(PostgreSQL版)
  • 12.9 定时任务
  • pbootcms模板下载/seo优化方式
  • 成品大香伊煮蕉免费在线/晋城seo
  • 360doc 网站怎么做/精准客户资源购买
  • 网站建设跟前端有什么区别/谷歌paypal官网登录入口
  • 微站网建站系统/免费推广网站视频
  • 用macbook做网站开发吗/seo教程自学网