第二阶段(c语言)

devtools/2024/9/23 12:28:39/

内存:一块临时存储区域

        虚拟内存 vm

        物理内存  pm 

        内存单元:一个内存单元的大小是1byte

        内存块:连续多个内存单元

        内存地址:相当于是教室的门牌号

        内存中的值:相当于是教室里面所存放的东西

int num = 0;

        error:&&num:不要针对地址进行取址操作

        &num:获取num所在内存的起始地址

        num:内存中所存取的内容

       error: *num:不能针对非地址值进行取值(对地址值取值(*ptr)

int* ptr = null; 

        error:&&ptr:不要针对地址进行取址操作

        &ptr:获取ptr这个指针变量所在内存的起始地址

        ptr:内存中所存取的内容(地址)

       error: *ptr:获取指针变量的这个地址值对应的内存其所存储的内容

        error:**ptr:通常也不能针对一个一级指针进行二次取值

int** q = &ptr;

浮点类型内存存储

 

 alloca申请的内存在栈上

malloc calloc申请的内存在堆上

const int* n;       //值不可变,地址可变

int* const n;        //地址不可变,值可变

consr int* const n;        //地址和值都不能改变

int main()
{const int num = 10;//值不可变int* ptr = (int*)&unm;*ptr = 1000;printf("%d\n",num);return 0;
}

======================================================

练习1:
以下程序输出结果

练习1:
以下程序输出结果void swap_1(int a, int b)
{int c;c = a;a = b;b = c;
}void swap_2(int& a, int &b)
{int c;c = a;a = b;b = c;
}int main()
{int a = 100;int b = 200;swap_1(a, b);printf("%d, %d", a, b);    //100,200swap_2(a, b);printf("%d, %d", a, b);
}
练习3:
下面的函数实现在一个固定的数上加一个数,有什么错误?请改正。
int add_n ( int n )
{static int i = 100;i += n;               //i不是一个固定值return i;
} 
//i是一个静态局部变量,含义:当前的i只能初始化一次
当程序结束时,静态局部变量被释放
=======================================================
int main(int argc,char *argv[])
{int num = 10;printf("%d\n",add_n(num));//110printf("%d\n",add_n(num));//120printf("%d\n",add_n(num));130printf("%d\n",add_n(num));140
}
练习4:
写出下列程序的运行结果。
int a; //全局变量未初始化系统默认为0
int b; 
int c;
void F1() 
{ b=a*2; a=b; 
}void F2() 
{ c=a+1; a=c; 
}int main() 
{ a=5;  // 如果int a = 5;打印结果为5,局部变量F1(); F2(); printf("a=%d/n",a); //11return 0;
}    
练习5:
下面程序能否编译通过,如果不能请修改? 其运行结果是多少,为什么?
在64位没问题,在32位有问题
64位:
#includ <stdio.h>int main()
{unsigned long long a = 0xAAAAAAAABBBBBBBB;unsigned int b = 0xDDDDDDDD;printf("valuea:%lx, valueb:%lx\n", a, b);
}
//结果为:aaaaaaaabbbbbbbb,dddddddd
32位:
#includ <stdio.h>int main()
{unsigned long long a = 0xAAAAAAAABBBBBBBB;    8位unsigned int b = 0xDDDDDDDD;printf("valuea:%lx, valueb:%lx\n", a, b);    32位中:lx:4位,llx为8位,所以存在问题
}小端存储,所以结果为:bbbbbbbb,aaaaaaaa 
原因:对于printf存在缓存区,printf相当于栈,参数从后往前入栈
//注意点:
1、输出缓存区是一个栈
2、函数参数入栈的顺序
3、printf输出时要严格按照前面的类型输出
练习6:
改错:
int main(void)
{int **p;//int arr[100];p = &arr;return 0;
}
//p中存放arr的地址时,*p为空,不能跨级操作

练习7:
char str1[] = "abc";
char str2[] = "abc";const char str3[] = "abc";
const char str4[] = "abc";const char *str5 = "abc";
const char *str6 = "abc";char *str7 = "abc";
char *str8 = "abc";printf("%d\n", str1 == str2);不相等,都在栈上
printf("%d\n", str3 == str4);不相等,const强调值不可变,地址不同
printf("%d\n", str5 == str6);
printf("%d\n", str7 == str8);

 


http://www.ppmy.cn/devtools/110037.html

相关文章

Docker in Docker 实践 on mac

在尝试tekton构建ci pipeline是&#xff0c;需要在k8 pod里build image&#xff0c;于是研究了如何docker in docker。 1. 编写自己的dind docker image FROM docker:20.10.16-dind ENV DOCKER_HOST unix:///var/run/docker.sock 2. docker build 自己的dind docker image并…

江协科技stm32————11-3 软件读写W25Q64

目录 MySPI.c W24Q64.c W25Q64_Ins.h main.c MySPI.c 包含通信引脚封装、初始化以及SPI通信的3个拼图&#xff08;起始、终止和交换一个字节&#xff09; #include "stm32f10x.h" // Device headervoid MySPI_W_SS(uint8_t BitValue) //ss cs…

无人驾驶为什么一定要4G+5G多卡聚合网络保障

无人驾驶一定要4G5G多卡聚合网络保障的原因主要包括其高速率、低时延和大连接的特点&#xff0c;这些特点对于无人驾驶汽车的运行至关重要。‌ 首先&#xff0c;4G5G多卡聚合网络的高速率特性使得数据传输更加迅速&#xff0c;这对于无人驾驶汽车来说无异于刚性需求。无人驾驶汽…

多云架构下大模型训练的存储稳定性探索

一、多云架构与大模型训练的融合 &#xff08;一&#xff09;多云架构的优势与挑战 多云架构为大模型训练带来了诸多优势。首先&#xff0c;资源灵活性显著提高&#xff0c;不同的云平台可以提供不同类型的计算资源和存储服务&#xff0c;满足大模型训练在不同阶段的需求。例…

马哥Linux运维 | 零基础快速上手:一步步教你制作高效Docker镜像

本文来源公众号“马哥Linux运维”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;零基础快速上手&#xff1a;一步步教你制作高效Docker镜像 多数情况下&#xff0c;我们做镜像是基于别人已存在的某个基础镜像来实现的&#xff0c…

Qt 无法定位程序输入点

解决灵感来自http://t.csdnimg.cn/f6Y5p 如果您确认自己的dll自身和它放置的位置都没有问题&#xff0c;那么请打开自己计算机的环境变量。 不会打开的去到下图&#xff0c;打开高级系统设置&#xff0c;打开环境变量。 我项目使用的编译器是MSVC 2022。所以请将下面那个bin文…

被低估的SQL

SQL是现代数据库管理系统中不可或缺的一部分。尽管它的使用已十分普遍&#xff0c;但在数据处理领域&#xff0c;SQL的某些功能和潜力仍然被许多人低估。接下来&#xff0c;小编将与您一起&#xff0c;探讨SQL的一些被忽视的特性&#xff0c;揭示它在数据管理中的真正实力。 1.…

苍穹外卖学习笔记(三)

三.启用禁用员工账号 controller /*** 修改员工状态** param id* param status* return*/PostMapping("/status/{status}")ApiOperation("修改员工状态")public Result startOrStop(Long id, PathVariable Integer status) {log.info("修改员工状态&…