C学习心得
C语言的学习总结
hyzhang_
每一个不曾起舞的日子都是对生命的辜负!!!
展开
-
const和volatile你真的懂了么?
const和volatile你真的懂了么?如果想知道 const和非const变量/对象/指针之间的赋值问题 可以查看,本篇只要对比一下const关键字和volatile关键字的区别。const:const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。volatile:叫做易变关键字,但是实际的作用是不要让CPU优化代码,而是确保每一次数据一定是从内存中取用的,而不是从CPU中直接取用,这就保持了内存的可见性。下面在Linux上使用 gcc 4.8 来看一看被volatile修原创 2021-08-13 18:24:07 · 351 阅读 · 1 评论 -
const和非const变量/对象/指针之间的赋值问题
const和非const变量/对象/指针之间的赋值问题变量赋值const int a = 10;int b = 10;a = b;// errorb = a;// correct变量在经过const关键字修饰以后就不能再被修改了,所以a=b是错误的。而b=a仅仅是将a变量中的内容复制一份给了变量b,所以赋值过后对副本b进行操作是不会对于a有什么影响的,这样行为是合法的。对象赋值struct A{ int a;};const A a;A b;a = b;// errorb =原创 2021-08-11 22:55:42 · 1395 阅读 · 0 评论 -
结构体内存对齐规则
结构体内存对齐规则第一个成员在与结构体偏移量为0的地址处。其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。注意:对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。VS中默认的对齐数为8结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。...原创 2021-05-28 17:38:07 · 101 阅读 · 0 评论 -
任意进制的相互转换
编写一个程序,可以实现将一个数字由一个进制转换为另一个进制。这里有62个不同数位{0-9,A-Z,a-z}。输入格式第一行输入一个整数,代表接下来的行数。接下来每一行都包含三个数字,首先是输入进制(十进制表示),然后是输出进制(十进制表示),最后是用输入进制表示的输入数字,数字之间用空格隔开。输入进制和输出进制都在2到62的范围之内。(在十进制下)A = 10,B = 11,…,Z = 35,a = 36,b = 37,…,z = 61 (0-9仍然表示0-9)。输出格式对于每一组进制转换,原创 2021-02-22 07:57:48 · 385 阅读 · 1 评论 -
内存函数和字符函数的函数实现(strstr)(strlen)(strcpy)(strcat)(strcmp)(memcpy)(memmove)(memset)
strlen求字符数组的长度的函数,下面用了3中方法实现了strlen#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>int my_strlen(char* str){ int count = 0; while (*str) { str++; count++; } return count;}int my_strlen(char * str){ char * start = str; while (*原创 2021-02-05 18:23:55 · 107 阅读 · 0 评论 -
sizeof和strlen的笔试题(把两者区别讲得透透的)
sizeof()和strlen()sizeof是一个操作符,计算操作数所占空间的大小,操作数可以使不同的类型或者变量strlen是一个函数,专门来求字符串或字符数组的长度的函数,他只关注’\0’的存在,只有遇到’\0’才会停下来接下来然我们看看几道面试题#include <stdio.h>int main(){ int a[3][4] = { 0 }; printf("%d\n", sizeof(a));//48 printf("%d\n", sizeof(a[0][0]))原创 2021-02-03 23:29:18 · 228 阅读 · 0 评论 -
指针进阶详解(字符指针)(指针数组)(数组指针)(函数指针)(函数指针数组)(函数指针数组指针)(回调函数)(qsort函数)
字符指针#include <stdio.h>int main(){ char ch = 'a'; char *p = &ch; char *p1 = "hello world!"; const char *p1 = "hello world!"; return 0;}字符指针就是指向一个char类型变量的指针。通常我们会这样直接引用char *p = “abcdef”;这时的abcdef是一个字符串常量,是不可修改的值。p也仅仅是存放abcde原创 2021-02-01 22:55:12 · 167 阅读 · 1 评论 -
水仙花数(升级版)多级自幂数
0 ~ 1000000的自幂数(3级自幂数就是水仙花数)#include <stdio.h>#include <math.h>int main(){ int num = 0; scanf("%d", &num); int i = 0; for (i = 0; i < num; i++) { int tmp = i; //求出数字是几位数 int n = 1; while (tmp / 10) { n++; tmp /=原创 2021-01-31 21:38:37 · 105 阅读 · 0 评论 -
数据的存储(计算机存储的两种模式)(大端和小端)
在电脑中存在许多的数据,整型,浮点型,还有结构类型。先来看看整型的存储。正负数在内存中都是以补码的方式存储,正数的原码,反码和补码都是相同的,而负数是的原码取反+1才能得到反码,大小端在内存中数据存储的方式有两种,一种是大端字节序储存,一种是小端字节序储存。什么是大端和小端呢?其实很简单大端存储:把一个数的低字节内容存放到高地址处,高字节内容放到低地址处。小端存储:把一个数的高字节内容存放到低地址处,低字节内容放到高地址处。先来举个栗子吧#include <stdio.h>原创 2021-01-31 20:46:07 · 3487 阅读 · 2 评论 -
strlen函数的三种实现方式(你知道几种呢?)
strlen库函数的三种实现方式#include <stdio.h>#include <assert.h>//断言头文件int main (){ char arr[] = "abcdefg"; int len = my_strlen3(arr); printf("%d\n", len); return 0;}1.计数器计数法//计数器计数int my_strlen1(const char* str){ assert(str); int count原创 2021-01-29 15:54:45 · 193 阅读 · 0 评论 -
一道调试不出来的题目bug
首先我们就来先看看这道题目是什么试分析出下列代码的运行结果,并说明为什么会出现这种结果?#include <stdio.h>int main(){ int i = 0; int a[3]; for (i = 0; i <= 5; i++) { a[i] = 0; printf("%d\n", i); } return 0;}真个代码看起来就有些问题,但是又不知道有什么问题???那我们先看看他的运行结果是什么吧!0 1 2 3 4 开始死循原创 2021-01-28 23:27:18 · 123 阅读 · 0 评论 -
杨辉三角形(C\C++)
杨辉三角 杨辉三角,是二项式系数在三角形中的一种几何排列。在欧洲,这个表叫做帕斯卡三角形。帕斯卡(1623----1662)是在1654年发现这一规律的,比杨辉要迟393年,比贾宪迟600年。杨辉三角是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。杨辉三角展示图#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>using namespace st原创 2021-01-24 22:29:16 · 973 阅读 · 0 评论 -
素数求解的不同感觉
素数求解是一个很经典的问题,今天想和大家唠唠,它被求解时的魅力(拿求100 - 200之间素数为例)难受暴力试除法#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>int is_prime(int i){ int j = 0; for (j = 2; j < i; j++) { if (i % j == 0) return 0; } return 1;}//试除法void fun1(){ i原创 2021-01-21 16:02:13 · 119 阅读 · 0 评论 -
Visual Studio2013/2017/2019去安全检查
你是不是还在为去安全检查而困惑,今天我就来谈一谈我的方法。这是第一种方法在源文件开头或者上述的预处理定义中加上#define _CRT_SECURE_NO_WARNINGS 1或者#pragma warning (disable:4996)但是以上的两种方法,每次重开VS时都要重新设置太麻烦,so…或者你可以直接在我的电脑文件管理中找到你所安装当VS地址在该目录下直接搜索 newc++file.cpp点击后用直接打开将#define _CRT_SECURE_NO_W原创 2021-01-13 17:30:20 · 658 阅读 · 2 评论 -
一个大一新生在他第一篇博客的叨叨-@昊宇 2021-1-11
自我介绍原创 2021-01-11 14:18:13 · 2013 阅读 · 7 评论