自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

距、__離的博客

认真学习语言的大学生一位

  • 博客(13)
  • 收藏
  • 关注

原创 深入理解指针(7)

因为从main函数传参的时候,传的是arr(数组名),而数组名又是数组首元素的地址,因此sz = sizeof(arr)/sizeof(arr[ 0 ])实际上是sz = 4 / 4 = 1 ,所以形参部分的sz计算才会是1,而sz=1的情况下,for循环的i < sz 只循环了一遍就不满足条件了。比如说你现在需要排序的数组是{ 1,2,5,4,3,6,7,9,8,10},他就可以把已经排序正确的进行忽略不用运算。而之所以称为冒泡函数,是因为整个运行过程就像是吹泡泡一样,大的在下面小的在上面。

2024-03-21 20:00:00 416 2

原创 深入理解指针(8)

以一级指针为例子:int * p = &a 是一级指针,p接收了a的地址,然后int * * pp = &p就是把p的地址交给了pp,而中间的两个 * ,第一个是和int一起解读的,即*pp变量的类型为int * ,第二个 * 说明的是pp是指针变量。首先是指针数组的概念我们必须了解一下,众所周知数组可以分为整形数组,字符数组......而整形数组的含义是:存放整形的数组。如上图所示,int* p = &a是指针最简单的用法,这种用法我们称为一级指针,其实就是指针变量接收了一个变量的地址。

2024-03-21 12:00:00 367 1

原创 深入理解指针(6)

而既然设计了这样子的输出,自然是要查看结果的,可以看到输入0~9后,输出的结果也是0~9。可以看到&arr如果+1,就和arr+1 &arr[ 0 ]不一样了,这是因为arr &arr[ 0 ]都是数组首元素的地址,所以只有4个字节,而&arr则是代表着整个数组,+1则是在跳过了整个数组的基础上再加4个字节,即第44个字节。如上图所示,for循环用数组名去输入的情况下,输入1~10的时候输出的结果依然是1~10,可见从结果上与上面指针访问数组的方法是一模一样的,因此是可以用指针去访问数组的。

2024-03-20 12:00:00 671 1

原创 深入理解指针(5)

从上述代码可以看见,在传输地址的时候,我们用了取地址操作符&把地址传输给ret函数的x和y,从监视图中可以看到x和y收到地址后进行交换使用了解引用操作符*来读取地址中的内容,因此在函数调用结束后,从打印结果来看a和b的地址所存储的内容因为被更改过所以打印的内容被交换了,这样子就完成了a和b的值的交换,这种传输地址进行调用方式被称为传址调用。这是一个简单的函数调用,尝试调用ret函数来进行a和b的交换。这些就是本篇要讲的所有内容了,希望其中的内容对你有所帮助,我们下篇再见。

2024-03-12 16:26:44 320 2

原创 Assert断言

观察上述的代码,可以看见我只是输入了一个assert检查scanf输入的n是否大于3的代码,但是当输入的数字小于3的时候,他不仅仅会报错,而且可以从右图看到.c,line 174,意思是.c文件的174行出现了错误,也就是说报错的时候assert语句还会把报错的位置一起报出来,因此程序员在使用assert语句去检查结果是否正确是非常方便的。Assert断言其实是一个检查语句,主要是检查代码运行的过程能不能达成一定的结果,检测的就是那个结果,如果结果有问题那么就会直接报错并结束程序的运行。

2024-03-08 17:30:00 314 2

原创 深入理解指针(4)

实际上它还是一个野指针,这是因为他虽然收到了a的地址,但是因为a在untrue函数内,返回a的地址的时候a本身所申请的存储空间已经被释放了,所以即使你收到了地址也无法再次进行访问(指向的位置不正确),所以这也是野指针的成因之一。当每次指针去打印数组内存在的地址的时候,它是属于正常的打印,而第11次打印的时候,因为数组内没有第11个元素的地址,所以第11次的打印所解引用的地址是随机的,因此这也是野指针的成因之一。当存在着越界访问,未初始化,出现还没有明确限制的指针时,我们可以放置null来规避野指针。

2024-03-07 17:08:55 948 4

原创 深入理解指针(3)

这段代码的不同之处在于,模拟实现的运行方式有差别,由于arr刚进入my_strlen的时候,对应的字符串是a的前面,也就是下标0,那么把这个0赋给新的指针变量char* start,当* str ≠ 0 的时候进入while循环,使str+1直到str = \0才停止,最后的返回要注意!这是一个非常简单的打印指针-指针,根据右图的结果可以看到打印的结果是-9和9,这是因为在数组内,下标0是指第一个元素,下标9是指第十个元素,所以相减就会得到他们之间相差的元素个数。这就是我要讲的内容。

2024-03-07 16:37:37 1001 3

原创 深入理解指针(2)

1.指针变量类型的意义2.const修饰指针指针变量类型的意义指针变量的大小和类型无关,只要是指针变量,在同⼀个平台下,大小都是⼀样的,为什么还要有各种各样的指针类型呢?其实指针类型是有特殊意义的,我们接下来继续学习。

2024-03-01 15:53:24 849 2

原创 深入理解指针(1)

这次我先讲两个知识点:1.内存和地址。2.指针变量和地址操作符。

2024-02-29 20:00:00 763 2

原创 While语句的学习与运用

while的语法结构:while(表达式)循环语句;首先我们来看一下如何用While语句在屏幕上打印1-10的所有数字:int main()int i = 1;i++;return 0;可以用如上的方法将循环内的i用printf输出后通过i++和return 0来返回到while(i<=10)反复进行运算,达到输出10次将1-10全部输出出来。

2023-11-01 22:47:14 58

原创 Switch语句的应用

那我们会觉得一直 if…else if …else if 实在是太复杂了,那这个时候我们就得有不一样的语法形式,于是我们便用到了switch 语句。那么Switch语句的语法是怎么样的呢?switch(整型表达式)语句项;是一些case语句:具体如下所示:case 整形常量表达式:语句;

2023-11-01 16:56:30 233 1

原创 关于if语法规范的学习与if语句的实际应用

这两段代码乍一看好像没有什么区别,实际上运行后会发现第二段输出的东西是什么都没有的。可见上面这个的else没有加上{ },下面这个则有加上{ }。这两段代码在目前的运行来讲是不会出现任何错误的,可是一旦需要else输出多条printf内容的时候你就会发现这是因为在if语句中,如果没有{ }的情况下,一个if或else只对应一个且只对应第一个printf,而第二个没有{ }则会被软件判定为是在这个if或者else之外的输出,所以是输出不出来的。

2023-10-31 23:06:50 85

原创 分支语句if语法结构是怎么样的?该如何使用?

1.分支语句if有分为无分支,有分支,多分支3种情况。2.如果该表达式中的结果为真,则执行输出printf的语句,反之则不输出。3.在所有的分支语句内要输出多条结果则要在多条结果外打上一个{ }则可以输出多条结果。

2023-10-30 17:30:40 33

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除