VS调试、debug和release、栈区底层简单介绍、const 修饰指针变量介绍

文章目录

  • 前言
  • 一、调试
  • 二、debug和release
  • 三、调试需要多用,多熟悉
  • 四、栈区底层简单介绍
  • 五、优秀的代码:
    • 常见的coding技巧:
  • 六、const 修饰指针变量
    • 1. const 出现在 * 左边
    • 2. const 出现在 * 右边
  • 七、strcpy函数的仿写
    • 1.版本1
    • 2. 版本2
    • 3. 版本3
    • 4. 版本4
  • 总结


前言

VS调试、debug,release、栈区底层简单介绍,好的代码,以及const修饰指针变量以及strcpy函数的仿写

一、调试

调试的快捷键

  1. F5 启动调试,经常用来直接跳转到断点。
  2. F9 创建和取消断点。
  3. F10 一次执行一个过程,比如一个语句,一次函数的调用
  4. F11 一次执行一句话,会进入函数内部执行语句

二、debug和release

  • debug 通常是指调试版本。
  • release 通常是发布版本,无法调试。

三、调试需要多用,多熟悉

  • 调试很重要
  • 据说,初学者80%写程序,20%调试(修bug),程序员20%写程序,80%调试.

四、栈区底层简单介绍

  • 先看一个例子
  • 这是在VS2019环境下的代码
  • 此代码的结果是死循环,重复打印“hehe”。
#include <stdio.h>int main()
{int i = 0;int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };for (i = 1; i <= 12; i++){arr[i] = 0;printf("hehe\n");}// i 与 arr 都是局部数据,都会放到栈区// 栈区的使用习惯是先高地址,再低地址// 所以,i 是 高地址, arr 是低地址// 但是 arr 数组的下标是由低地址到高地址// 所以给一定情况的越界,会导致 arr 和 i 的是同一个地址// 所以 i 会不断地重置为0 ,会陷入死循环。return 0;
}
  • 内存分为 栈区,堆区,静态区
    1. 栈区内存的使用习惯是,先使用高地址空间,再使用低地址处的空间。
    1. 数组随着下标的增长地址是由低到高变化的。
    1. 如果i 和 arr之间由适当的空间,利用数组的越界操作就可能会覆盖到i,就可能会导致死循环出现的。

在这里插入图片描述

五、优秀的代码:

  1. 代码运行正常
  2. bug少
  3. 效率高
  4. 可读性高
  5. 可维护性高
  6. 注释清晰
  7. 文档齐全

常见的coding技巧:

  1. 使用assert
  2. 尽量使用const
  3. 养成良好的编码风格
  4. 添加必要的注释
  5. 避免编码的陷阱

六、const 修饰指针变量

1. const 出现在 * 左边

 int main(){int a = 0;int n = 0;const int* p = &a;//*p = 0; // errp = &n; // rightreutrn 0;
}
  • 如上代码
  • const 出现在 * 左边,表示指针变量p所指向的对象能通过变量p被修改。
  • 但是,指针变量p可以重新取地址,不可以被修改。

2. const 出现在 * 右边

 int main(){int a = 0;int n = 0;int* const p = &a;*p = 0; // right//p = &n; // errreutrn 0;
}
  • 如上代码
  • const 出现在 * 右边,表示指针变量p所指向的对象可以通过变量p被修改。
  • 但是,指针变量p可以重新取地址,可以被修改。

七、strcpy函数的仿写

  • strcpy库函数是会把字符串的**\0字符**也拷贝上的。

1.版本1

#include <stdio.h>
//  strcpy函数的仿写
void my_strcpy(char* dect, char* ret)
{while (*ret != '\0')// ret中若找到\0则跳出循环,此时*ret已经时\0,再次赋值就可以将\0也拷贝到dect中{*dect = *ret;dect++;ret++;}*dect = *ret;
}int main()
{char arr1[20] = "XXXXXXXXXXXXXX";char arr2[] =   "hello bit";my_strcpy(arr1, arr2);printf("%s", arr1);return 0;
}

2. 版本2

#include <stdio.h>
//  strcpy函数的仿写
void my_strcpy(char* dect, char* ret)
{while (*ret != '\0'){*dect++ = *ret++;}*dect = *ret;
}int main()
{char arr1[20] = "XXXXXXXXXXXXXX";char arr2[] = "hello bit";my_strcpy(arr1, arr2);printf("%s", arr1);return 0;
}

3. 版本3

#include <stdio.h>
//  strcpy函数的仿写
void my_strcpy(char* dect, char* ret)
{while (*dect++ = *ret++){;}
}int main()
{char arr1[20] = "XXXXXXXXXXXXXX";char arr2[] = "hello bit";my_strcpy(arr1, arr2);printf("%s", arr1);return 0;
}

4. 版本4

  • 考虑到如果用户传过来的不是指针
  • 如果传入数据写反了等情况
#include <stdio.h>
#include <assert.h>
//  strcpy函数的仿写
void my_strcpy(char* dect, const char* ret)
{assert(dect != NULL);assert(ret != NULL);while (*dect++ = *ret++)// ret中若找到\0则跳出循环,此时*ret已经时\0,再次赋值就可以将\0也拷贝到dect中{;}
}int main()
{char arr1[20] = "XXXXXXXXXXXXXX";char arr2[] = "hello bit";char p = NULL;//my_strcpy(arr1, p); // 错误示例//my_strcpy(arr2, arr1); // 会报错my_strcpy(arr1, arr2); printf("%s", arr1);return 0;
}

总结

VS调试、debug,release、栈区底层简单介绍,好的代码,以及const修饰指针变量以及strcpy函数的仿写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/3068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Andorid进程间通信之 UNIX SOCKET

1&#xff0c;什么是UNIX SOCKET UNIX SOCKET&#xff0c;域套接字&#xff0c;UNIX SOCKET可用于同一台设备进程间通信&#xff0c;它不需要经过网络协议栈&#xff0c;不需要打包拆包、计算校验和、维护序列号应答等&#xff0c;只需要将数据从一个进程复制到另一个进程&…

高精度加法及乘法

目录 字符串的高精度加法 为什么需要高精度加法&#xff1f; 怎么进行高精度加法&#xff1f; 链表的高精度加法 翻转链表&#xff08;带虚拟头节点&#xff09; 字符串的高精度乘法 字符串的高精度加法 大数加法_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.co…

linux下查看前10最耗内存的进程

lunux查找占用内存前10的进程 1、使用Top命令查询进程 输入 top 命令&#xff0c;然后按下大写M按照内存MEM排序&#xff0c;按下大写P按照CPU排序。 2、查询占用CPU最高的前10个进程 ps aux|head -1;ps aux|grep -v PID|sort -rn -k 3|head 3、查询占用内存最大的前10个进程…

2024年度西安市创新联合体备案申报条件时间要求须知

一、申报条件 组建市级创新联合体需具备牵头单位、成员单位、组建协议、首席科学家等四个条件。 (一)牵头单位 1.牵头单位应为在西安市注册登记的省市产业链龙头骨干企业&#xff0c;重点支持市级重点产业链“链主”企业; 2.牵头单位一般为1家。 (二)成员单位 1.成员单位…

excel 按照姓名日期年月分组求和

excel 需要按照 姓名 日期的年份进行金额求和统计&#xff0c;采用sumifs 进行统计 注意&#xff1a;sumifs 不支持 合并列拆分计算&#xff0c;合并列只会计算一个值 表格数据大概如下&#xff1a;(sheet) ABC姓名日期金额A2023/01/01500A2023/01/151500B2023/01/01200B202…

python 调试 c++源码

1. gdb常用调试命令概览和说明 2. 编译c库设置Debug模式 cmake设置debug 在CMake中设置debug模式通常意味着启用调试信息和优化。以下是一个简单的CMakeLists.txt文件示例&#xff0c;展示了如何设置项目以便在Debug模式下构建&#xff1a; cmake_minimum_required(VERSION 3…

cad中快速计算多个矩形面积的方法

1、输入命令reg&#xff0c;选中矩形创建面域 2、输入命令uni,选中刚刚创建的面域&#xff0c;组合成一个面域 3、输入命令&#xff1a;LI &#xff0c;选中面域&#xff0c;即可查看面积和周长 需注意的一点&#xff0c;开始创建的矩形或者多段线要在一个面内&#xff0c;就是…

[沉浸式翻译]最好的网页翻译工具

沉浸式翻译 沉浸式翻译是一种翻译工具&#xff0c;它提供了多种平台的支持&#xff0c;包括桌面端的Edge、Chrome、Firefox、Safari以及移动端的iOS和Android。用户可以在这些平台上安装沉浸式翻译的插件&#xff0c;以便在浏览网页时获得翻译服务。 浏览器的安装教程 详细的…

WEB网站服务器安全漏洞扫描环境搭建及漏洞工具扫描

一、适用环境 1、企业自建有门户网站&#xff1b; 2、使用Struts框架的WEB网站&#xff1b; 3、网站服务器涉及有数据库之类的项目&#xff0c;如&#xff1a;微信登录、手机登录、充值、收费等。 4、使用安卓版、苹果版、电脑版结合的缴费类网站平台。 5、方便但需提高安全性…

排列对称串

Description:很多字串&#xff0c;有些是对称的&#xff0c;有些是不对称的&#xff0c;请将那些对称的字事按从小到大的顺序输出&#xff0c;字事先以长度论大小&#xff0c;如果长度相同&#xff0c;再以ASCI码值为大小标准 Input.输入数据中含有一些字串(1≤串长≤256)。 #…

气膜游泳馆有哪些应用优势呢?-轻空间

气膜游泳馆作为一种利用气膜技术建造的室内体育场馆&#xff0c;具有环保、节能、灵活、美观等特点&#xff0c;适合在各种气候和地形条件下使用。以下是气膜游泳馆具有的应用优势&#xff1a; 1. 全年四季恒温恒湿&#xff1a;气膜游泳馆内部设有智能化的恒温恒湿系统&#xf…

基础环境:wsl2安装Ubuntu22.04 + miniconda

服务器相关信息&#xff1a; Thinkpad p1 gen5 64G 2T 3080ti&#xff0c;自带的有nvidia-smi显卡驱动。使用wsl2安装Ubuntu22.04 miniconda目标&#xff1a;安装gpu版本的PyTorch2.1.2&#xff08;torch2.1.2/cu117 torchvision0.16.2/cu117&#xff09; 处理器 12th Gen I…

ubuntu扩展根目录磁盘空间

ubuntu扩展根目录磁盘空间 扩展虚拟机磁盘空间 查看现有磁盘状态 查询现有分区状态&#xff0c;/dev/sda是我们要扩展的磁盘 fdisk -l 开始进行磁盘空间的扩容 parted /dev/sda#扩展3号分区的空间 resizepart 3刷新分区空间 resize2fs /dev/sda3查询扩展结果&#xff0c;…

Linux安装Matlab运行时

一般而言&#xff0c;安装Matlab的linux系统是带桌面版的&#xff0c;如果没带&#xff0c;不在本教程范围内。 一、下载Matlab 下载地址&#xff1a;MATLAB Runtime - MATLAB Compiler - MATLAB 本教程使用R2020b(9.9) 二、linux系统中进行解压 将zip传入linux系统&#xf…

EigenLayer生态全解析:再质押与AVS崛起的序章

基于以太坊网络的再质押协议EigenLayer提出了利用为以太坊网络验证而质押的ETH来与其他协议共享安全性和资本效率&#xff0c;同时为协议参与者提供额外利息。在AVS、再质押、积分系统等概念的推动下&#xff0c;逐渐形成一个庞大的生态系统&#xff0c;从2024年初到现在EigenL…

使用JS代理 实现大对象的功能拆解

序言 在Android开发中&#xff0c;可以通过webView的addJavascriptInterface方法注入一个对象到网页中。但是随着开发的需求越来越多。这个对象身上的方法也越来越多。这个对象对应的java类&#xff0c;体积越来越大&#xff0c;不利于维护。为了在不影响之前代码的基础上。把…

【C++干货基地】深度理解C++中的高效内存管理方式 new delete

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 哈喽各位铁汁们好啊&#xff0c;我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发&#xff0c;不知道各位的…

Golang基础5-指针、结构体、方法、接口

指针 和c/c类似&#xff0c;但是go语言中指针不能进行偏移和运算&#xff0c;安全指针 &&#xff08;取地址) *(根据地址取值) nil(空指针&#xff09; make和new之前对比&#xff1a;make用于初始化slice&#xff0c;map&#xff0c;channel这样的引用类型 而new用于类…

Metasploit Framework(MSF)从入门到实战(一)

MSF的简介 目前最流行、最强大、最具扩展性的渗透测试平台软件 基于Metasploit进行渗透测试和漏洞分析的流程和方法 2003年由HD More发布第一版&#xff0c;2007年用ruby语言重写 架集成了渗透测试标准 (PETS&#xff09; 思想 一定程度上统一了渗透测试和漏洞研究的工作环…

针孔相机模型原理坐标系辨析内参标定流程内参变换

针孔相机的内参标定 针孔相机原理真空相机模型图片的伸缩和裁剪变换 内参标定———非线性优化张正定标定详细原理(含公式推导)通过多张棋盘格照片完成相机的内参标定流程(C代码)其他工具箱 相机分为短焦镜头和长焦镜头&#xff0c;短焦镜头看到的视野更广阔&#xff0c;同样距…