【C语言】指针进阶第四站,数组/指针的传参问题
[TOC] 朋友们,到站啦! 指针进阶第四站🚏,传参问题 0.引例自定义函数里形参的类型,要和函数调用中传过去的实参类型相对应 在初阶C语言的学习里面,我们了解到传参分为传址和传值两种类型 一起来复习一下吧👉【链接】 test函数里的是int类型,我们传过去的参数a也是int类型 12345678void test(int n){}int main(){ int a=1 test(a); return 0;} 好了,现在你已经知道了函数传参的基本概念了😁 那么就来分析一下数组传参、指针传参的代码吧! 1.一维数组传参看看以下函数的代码示例 你觉得谁是正确的,谁是错误的呢? 12345678910111213141516171819include <stdio.h>void test(int arr[]){}void test(int arr[10]){}void test(int *arr){}void test2(int...
【C语言】指针进阶第三站,数组指针
[TOC] 上一站🚏我们学习了指针数组 今天来到我们的第三站🚌 寒假也不能落下学习! 今天学到了一个新的markdown语法 我是红色 1<font color=red>我是红色</font> 数组指针整型指针:指向整型的指针 字符指针:指向字符的指针 数组指针:指向数组的指针 1基本概念下面哪个是数组指针呢? 指针数组和数组指针的概念很容易混淆,一定要分清楚哦! 12int *p1[10];int (*p2)[10]; p1是指针数组,每个元素的类型是int* p2是数组指针,每个元素的类型是int(*)[10] 1234int (*p2)[10];//p2先和*结合,表示p2是一个指针变量//指向一个大小为10个整型的数组//所以p2是数组指针 注:[ ]的优先级高于*,所以必须加上()来保证p2先和*结合 1.1代码示例12int* parr[6];int* (*pp)[6] =...
【C语言】指针进阶第二站,指针数组
[TOC] 嘟嘟嘟🚌,指针进阶的第二站指针数组到了! 上车上车! 回顾一下第一站🚍的内容:字符指针 指针数组数组是一种类型的数的集合 整型数组的元素都是int类型 指针数组的元素都是指针变量 123int* arr1[10];//整型指针的数组char*arr2[10];//一级字符指针的数组char** arr3[5];//二级字符指针的数组 参考这一份示意图 示例1:定义多个字符指针在上一站的字符指针里面,提到了可以直接用指针来创建一个常量字符串 同理,我们可以将多个指针放在一块,凑成指针数组,一次性创建多个指向常量字符串的指针 123456789101112int main(){ char* arr[] = { "abcdef", "qwer", "zhangsan" }; int i = 0; int sz = sizeof(arr) / sizeof(arr[0]); for (i = 0; i < sz;...
【C语言】指针进阶第一站,字符指针&typedef关键字
[TOC] 紧张刺激的寒假学习开始啦! 简单回顾一下指针的概念 内存会划分以字节为单位的空间,每一个字节都有一个编号(地址/指针) 指针变量可以存放这个地址/指针 注:我们日常所说的指针,一般是指针变量 下面让我们坐上指针进阶的🚌,来到第一站!字符指针 1字符指针1.1代码示例112345678int main(){ char ch = 'w'; char* p= &ch; char* pa = "abcdef"; return 0;} 字符变量ch里面存放了字符w 字符指针p里面存放了ch的地址 指针变量pa里面存放了abcdef字符串的地址,我们并没有对这个字符串进行初始化。而是直接把它放进了指针变量pa里面。 和前两行的字符w不同,abcdef是存储在内存中的只读数据区,无法修改,即便通过指针也无法修改。 为了避免理解出错,我们一般会加上const修饰 1const char* pa =...
【教程】Typora+PicGo+阿里云OSS搭建博客图床(超详细)
如果你想搭建一个和本站类似的个人博客,那就需要图床来辅助 [TOC] 为什么要搭建博客图床?以CSDN为例,我们可以选择使用大部分blog平台通用的markdown语法进行博客创作 虽然CSDN自带的编辑器已经能满足我们95%的写作需求 但是Typora在markdown语法编辑上能给你提供更好的写作体验 所以我选择了以Typora+Picgo+图床的方式来进行博客创作 而在本地的markdown文件.md中,图片是以“外链”这一形式存在的 Office...
【C语言】浮点数在内存中的存储(详解)
[TOC] 引言 本文首发于 ❄️慕雪的寒舍 markdown语法小知识点写在前面,markdown语法的小知识点 如何实现文字变红且加上了底色?如hello world markdown语法如下即可! 1`hello world` 以及页内跳转 12<span id="jump">这一句话没啥用</span>[回到开头](#jump) 正题之前学习完了整形、字符类型在内存中的存储,今天让我们来看看float类型! 整数类型👉【int】 字符类型👉【char】 常见的浮点数123.141591E10 浮点数家族包括float、double、long double 类型。 而浮点数表示的范围是在头文件<float.h>里面定义的。 需要了解的是 如果你打出3.14,编译器默认是double类型的。若想让他为float类型,则要在前面加f; 1E10是科学计数法,代表1.0×10^10 代码引例先来看看下面这串代码 1234567891011int main(){ int n =...
【C语言】char类型如何在内存中存储?
@[toc] 引子上篇博客向大家介绍了int类型在内存中的存储方式【链接】 本篇博客我们继续往后,看看整形家族里的char类型是如何在内存中存储的吧! char类型字符类型包括以下两种形式 unsigned char 无符号 signed char 有符号 用一个简单的printf来看看它们在打印上的区别 12345678910#include<stdio.h>int main(){ char a=-1; signed char b=-1; unsigned char c=-1; printf("a=%d b=%d c=%d\n",a,b,c); return 0;} 打印结果为 1a=-1 b=-1 c=255 这里我们可以得出两个结论 1.在VS编译器下,char默认为signed char 2.unsigned char的处理方式和signed不同 无符号数的处理可以看我之前写的这一篇博客👉【链接】 存放和提升例一:-1先写出-1的原反补码 12310000000 00000000...
【C语言】unsigned无符号类型运用的两个实例
@[toc] 前排提醒😂本篇博客是对下一篇博客《char类型在内存中的存放》的拓展 并非对unsigned类型的详解! 示例1123456789#include <stdio.h>int main(){ int i=-20; unsigned int j=10; printf("%d\n",i+j); return 0; } 当有符号类型和无符号类型相加的时候,编译器是怎么处理的呢? 12310000000 00000000 00000000 00010100 -20的原码11111111 11111111 11111111 11101011 反码11111111 11111111 11111111 11101100 补码 100000000 00000000 00000000 00001010 10的补码 -20的补码和10的补码 相加 12311111111 11111111 11111111 11110110 得到的补码11111111 11111111 11111111 11110101...
【C语言】整型数据在内存中的存储(详解)
[toc] 数据类型我们知道,C语言中有很多不同的数据类型 在cppreference.com网站上可以找到C语言中的不同类型【链接】 先来认识一个不那么常见的类型 布尔类型C99中引入了布尔类型 _Bool实质:把1和0变成ture和false 1234567891011#include<stdbool.h>int main(){ _Bool flag = true; if(flag) { printf("hehe\n"); } return...
【C语言】整型提升和算术转换
[toc] 整型提升要想知道什么是整型提升,那就要从表达式求值说起 表达式求值 表 达 式 求 值 的 顺 序 一 部 分 是 由 操 作 符 的 优 先 级 和 结 合 性 决 定 同 样,有 些 表 达 式 的 操 作 数 在 求 值 的 过 程 中 可 能 需 要 转 换 为 其 他 类 型 什么是表达式? 举个最简单的例子 12345678int main(){ int a=3; int b=5; int c = a + b * 7; //c的式子即为表达式 return 0;} 而C的整个式子就是一个表达式求值 在这之中,参与计算的两个变量以及结果变量都是int类型,并不需要进行整型提升 在我们日常编写代码的时候,编译器经常会有隐式类型转换 隐式类型转换 C的整型算术运算总是至少以缺省整型类型的精度来进行的 为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转化为普通整型,这种转换称为整型提升 12float f =3.14int num...