调试及const详细讲解,实例

简介: 调试及const详细讲解,实例
#define _CRT_SECURE_NO_WARNINGS 1 
#include<stdio.h>
//在某一循环里,想要准确调试某一次,(如500次循环的299次)用
//设置断点+右击鼠标条件i==299+F5
//实例
// 求1!+2!+....+n!
//int main()
//{
//    int n = 0;
//    scanf("%d", &n);//scanf的%d后面不能加\n
//    int i = 0;
//    int ret = 1;
//    int j = 0;
//    int sum = 0;
//    for (j = 1; j <= n; j++)
//    {
//        ret = 1;
//        for (i = 1; i <= j; i++)
//        {
//            ret*= i;
//        }
//        sum  += ret;
//    }
//    printf("%d\n", sum);
//    return 0;
//}
//for循环   产生1~n的数字
// 
//for(i=1;i<=n;i++)
//{
//ret = *i;        产生的是n的阶乘
//}
// 
//for (j = i; i <= j; j++)
//{
//    for (i = 1; i <= j; i++)
//    {
//        ret = *i;    产生的是1+...+n的阶乘
//    }
//    sum = +ret;
//}
//int main()
//{
//    int i = 0;
//    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//    for (i = 0; i <= 12; i++)
//    {
//        arr[i] = 0;
//        printf("hehe\n");//hehe可能死循环,因为数组随着下标的增长地址由低到高,,,,
//        //栈区内存使用时是先高地址后低地址,i = 0; 先被创建(相比于arr[10],在高地址,,,,,
//        //但是数组arr[10]一直向上非法占用空间(越界),总有一次使用到i的地址,非法修改i的值,使i重新变为0
//        //陷入死循环,vs2022没这个可能(因为比较只能,直接报错)
//        //每个编译器陷入死循环的条件不一样,中间(非法越境)所需要空间不一样
//    }
//    return 0;
//}
//预防发生错误
//通过编码的技巧,减少.降低错误
//模拟实现strcpy(字符串拷贝)
//#include<string.h>
//void my_strcpy(char*dest,char*src)//dest和src名字是自己随便起的,对应arr1和arr2的首元素的地址
//{
//    while (src != '\n')
//    {
//        *dest++ = *src++;
//    }//没拷贝\0,需要把src的\0也放在dest中,否则dest无法停止(无\0)
//    *dest = *src;
//}
//进阶版
//void my_strcpy(char* dest, char* src)//dest和src名字是自己随便起的,对应arr1和arr2的首元素的地址
//{
//    while (*dest++ = *src++)
//        //先引用,后++    src里面的h,解引用并放在dest的第一个地址里,然后++,++后src的第二个e解引用.....
//        //'\0'的SCII值为0,0为假,不满足while循环,停下来 
//    {
//        ;
//    }
//}
//再次进阶版(assert考虑空指针的情况)
//arr2如果是空指针,空指针不能解引用操作
//#include<assert.h>
//void my_strcpy(char* dest, const char* src)//dest和src名字是自己随便起的,对应arr1和arr2的首元素的地址
//{                                       //const作用:使const后面值不能被修改,修改就报错
//    assert(src!=NULL);//断言----如果不满足,报错(错误信息在哪一行)        //当判断条件用!!!
//    assert(dest!= NULL);
//    while (*dest++ = *src++)
//        //先引用,后++    src里面的h,解引用并放在dest的第一个地址里,然后++,++后src的第二个e解引用.....
//        //'\0'的SCII值为0,0为假,不满足while循环,停下来 
//    {
//        ;
//    }
//}
//int main()
//{
//    char arr1[20] = "xxxxxxxxxx";//20字符的空间
//    char arr2[] = "hello";//5字符的空间
//    //strcpy(arr1,arr2);//strcpy(arr1,arr2)是字符串拷贝
//    my_strcpy(arr1, arr2);//arr1为起始代码,arr2为源代码
//
//    printf("%s\n%s\n", arr1,arr2);
//    return 0;
//}
//const作用:可以直接报错,不执行
//const作用实例
//int main()
//{ 
// int num = 10;
//    int* pa = &num;
//    *pa = 20;
//    printf("%d\n", num);//打印结果为20
//    return 0;
//}
//改为
    //锁1:::const int num = 10;//const修饰变量为常变量,不能通过num=20;被修改,但是可以通过地址修改,如int* pa = &num;依旧正确
    //锁2:int conts * pa = &num;//const修饰指针变量时,如果放在*左边,修饰的是*p,表示指针指向的内存,不能通过*pa=20;被修改
           //但是锁死的是*pa,而不是pa,还可以给pa赋值,如int n=100;p=&n;还可以给pa赋值,再次修改
    //锁3:int*const pa=&num;//报错的是pa,即pa锁死了,改不了,*pa能被改(修饰指针变量p,表示指针变量不能被改变,但是指针指向的内容可以改变)
//右边锁死地址,左边锁死内容
// 
//int        *         pa       (原来)
//int const  *         pa             *pa=0;不能发生   但是pa=&n;n=100;可以发生(通过n改pa,使之改num正确)
// int       *  const  pa    *pa=0可以发生,但是pa = &n;不能发生(const修饰的是pa本身,不修饰指针*pa,所以不能改num)
//int const  *  const  pa    *pa=0; pa=&n;都不能发生


相关文章
|
存储 算法 C++
【C/C++ Vector容量调整】理解C++ Vector:Reserve与Resize的区别与应用
【C/C++ Vector容量调整】理解C++ Vector:Reserve与Resize的区别与应用
1258 1
|
运维 安全 网络安全
|
监控 Java 调度
Java面试题:描述Java线程池的概念、用途及常见的线程池类型。介绍一下Java中的线程池有哪些优缺点
Java面试题:描述Java线程池的概念、用途及常见的线程池类型。介绍一下Java中的线程池有哪些优缺点
234 1
|
监控 大数据 应用服务中间件
epoll的水平触发LT以及边沿触发ET的原理及使用及优缺点
epoll的水平触发LT以及边沿触发ET的原理及使用及优缺点
618 0
|
传感器 算法 Linux
查看 PCD 点云 windows
在Linux系统查看PCD 点云有许多方法,但发现在windows下的工具比较少,这里分享两个思路,一个是使用MATLAB工具编程,另一个是下载CloudCompare软件进行查看点云。
12068 0
查看 PCD 点云 windows
|
Unix Linux
fcntl()函数的作用及用法
fcntl()函数的作用及用法
539 0
【Log4cpp】项目日志Log4cpp的简单使用
【Log4cpp】项目日志Log4cpp的简单使用
|
存储 算法 Shell
C++项目实战-多进程(一篇文章)(一)
C++项目实战-多进程(一篇文章)(一)
382 0
|
程序员 C++ Windows
Windows C++ 使用PIPE命名管道实现进程间通讯
本文章是介绍在Windows下,使用PIPE管道实现进程间通讯,可是实现两个进程之前相互发送读取消息。
426 0
|
缓存 Java 开发者
Java中多线程创建方式对比与线程池相关原理概述汇总(超详细)
Java中多线程创建方式对比与线程池相关原理概述汇总(超详细) 准备加入阿里开发者社区,同时也是很久没有写文章了,一时也不知道从何写起,那就先从多线程来吧,这次想把多线程与高并发的相关知识进行一下梳理,从多线程的几种创建方式开始,逐步到线程池原理分析,再到java中常用锁的使用场景与原理分析,再到高并发的处理方案,以及后面分布式锁等知识点,分成批次来进行梳理,这次先分析一下多线程的创建方式的异同点与线程池的执行原理。
1496 3
Java中多线程创建方式对比与线程池相关原理概述汇总(超详细)