- 博客(73)
- 收藏
- 关注
原创 如何让a和b的地址互换?
m和n本质上还是一个变量,而&a和&b是一个常量,你不能写成&a=&b,这就相当于写10=20,肯定不行,m只是记录了a的地址,但m不是&a本身。的地址并不是一个常见的操作,因为变量的地址是由编译器分配的,通常不能直接更改。然而,你可以通过指针来间接实现类似的效果。如果你需要更复杂的内存管理或地址交换操作,可能需要深入理解动态内存分配(如使用。的值,从而实现了指针所指向对象的“交换”。现在分别指向了对方原本指向的变量。在这个例子中,我们定义了两个指针。在C语言中,直接交换两个变量。
2025-01-19 20:02:55
208
原创 c语言之字符指针疑难解答(10.19)
用%s打印东西时,只要给printf要打印的字符串的地址就行20分钟左右,还得再听一遍,难cpp[-1]可以转化为*(cpp-1)cpp[-1][-1]可以转化为*(*(cpp-1)-1)这里有一个要点:cpp是一个指针,当它对它进行自增自减操作时,它不会自动复原,不像你自己定义了一个数组之后,当然数组名是没法改变它的地址的(下图代码会报错)在上面这串代码中,parr[0]存的并不是变量a的地址,要写成这样才行 int* parr[] = { &a,&b,&c };
2024-10-19 18:43:22
1061
原创 学习笔记之指针进阶(10.11)
在 C 语言中,当你对一个指针进行加法操作时,编译器会根据指针所指向的数据类型来决定实际移动的字节数。如果你有一个指向某个类型的指针。,结果都是相同的:指针都会移动到下一个相同类型元素的位置。在这两种情况下,数值 1 都是作为元素的数量,而不是字节数来使用的。以上解释是错误的,a[0]不是整个数组的名字,a+1才是第二个一维数组的地址。指向的是一个结构体,那么它们会使指针向后移动该结构体的大小(即。实际上是没有区别的。这里的关键在于理解指针算术。向后移动一个元素的大小。的意思是将指针向后移动。
2024-10-11 17:56:43
450
原创 char类型的-128到底是个神马东西?
char类型的-128的补码是什么样的?在计算机中,负数通常使用补码形式来表示。对于一个有符号的char类型,其大小为 8 位(1 字节),可以表示从 -128 到 127 的整数。-128 是有符号 8 位整数能够表示的最小值。它的二进制补码表示是特殊的,因为它是唯一一个没有正数对应项的负数。在 8 位系统中,-128 的补码直接就是1000 0000。这里是如何得到这个结果的简要解释:首先,考虑正数 128 的二进制表示,它会是1000 0000。
2024-10-11 17:03:14
878
原创 date:10.4(Content:Mr.Peng)( C language practice)
局部变量是存放在栈上的,栈又是从高到底存放所以先存i后存arr[]
2024-10-04 21:54:07
331
原创 有符号整型和无符号整型比较大小,整型提升{9.28下午}
有符号整型和无符号整型比较大小时,会先把有符号整型先转变成无符号整型-1的补码是32个1,当成无符号整型来处理时,补码就是源码,所以是一个超级大的数在C语言中,当有符号整型(如int)和无符号整型(如)进行比较时,并不会直接将有符号整型转换为无符号整型来进行比较。然而,实际的行为可能会让人误解为发生了这样的转换,因为比较操作是按照“值的二进制表示”来进行的,而不是按照它们的数学意义。在比较时,有符号整型会被“隐式地”转换为一个更大的类型(在这个情况下,通常是),但这个转换并不是简单的数值转换。
2024-10-04 21:53:00
1200
原创 有问题未解决(9.28)
数组名+1,就是下一个元素的地址,int类型的数组名+1移动四个字节,char类型的数组名+1移动1个字节,数组的类型决定了数组名+1移动的距离。[5]之所以不能省略是因为arr的类型是int[5],它的步长是5,和指针类似,一般情况下,指针的类型要和传过去的地址的类型一样。数组名是首元素的地址,arr2的首元素类型是一级指针,一级指针的地址要放到二级指针里面,实际上,arr2就是一个二级指针。arr是一个int类型的数组,他存的就是一个数,而不是变量,a的地址和arr的地址并不一样。
2024-09-28 17:30:15
496
原创 所有的表达式都有结果吗?
在C语言中,大多数表达式都有结果或返回值,但这些结果或返回值的用途和类型可能因表达式的类型而异。然而,并不是所有的语法结构都是表达式,也不是所有的表达式都被设计为产生可用于其他表达式的直接结果。*dest++=*src++,表达式的结果就是字符,而字符又通过ascll码表转化为对应的数字,'\0'对应的值是0,所以循环结束。a=b+3,这个表达式的结果就是8,8再赋值给c.int main()int a = 10;int b = 30;p = &b;//*p = 20;//
2024-09-20 16:13:42
997
原创 探索C语言中数组作为函数参数的奥秘
在C语言的世界里,数组是一种基础且强大的数据结构,它允许我们存储相同类型的数据集合。然而,在处理函数和数组的关系时,尤其是在数组作为函数参数传递时,初学者往往会感到困惑。今天,我们就来深入探讨这一话题,通过具体的代码示例来揭开其神秘面纱。
2024-08-27 10:56:50
457
原创 c语言每日学习8.24
因此,当你传递一个字符串(即字符数组的指针)给函数时,函数可以通过遍历字符串直到遇到空字符来确定字符串的长度。void reverse_string(char* str) 为什么不用传递数组的长度?函数会遍历字符串直到遇到空字符,并返回遍历过的字符数量(不包括空字符)。函数也能通过遍历字符串来确定其长度,并进行反转操作。函数不需要显式传递数组长度的原因。函数可以计算字符串的长度,这是因为。在C语言中,字符串通常是以空字符。所以,即使不传递数组的长度,
2024-08-25 09:37:43
1057
原创 c语言指针(8.11)
虽然在技术上是合法的,并且可能符合你的预期(得到指向下一个元素的指针),但它实际上是在对已经退化为指针的。不是一个指针,而是一个数组(尽管在表达式中它会被退化为指向其首元素的指针)。进行赋值或将其作为函数参数传递(因为它不是一个左值),但你可以通过索引来访问它的元素(如。表示一个数组(尽管在表达式中它通常会被退化为指向其首元素的指针)时,直接对。存储了一个地址,这个地址是二维数组第一行的首元素的地址。的第一行(或称为第一个一维数组)的首元素的地址。是按照指针的步长(即指向类型的大小)来计算的,对于。
2024-08-11 12:05:23
536
原创 c语言(8.10)
同理,在二维指针数组中,指针指向的是第一个数组的地址,&arr,而不是第一个数组的第一个元素的地址,其实第一个数组的地址和第一个数组的第一个元素的地址是一样的,只不过。在 C 语言中,一旦数组名被用作指针(例如在表达式中),它就失去了其原始数组类型的信息,只保留了指向其首元素的指针类型的信息。为了获取数组的长度,你通常需要以某种方式显式地传递或存储这个信息,就像我之前提到的那样,使用一个额外的数组来存储每个数组的长度。在指针数组中(一维数组),指针指向的是数组中第一个元素的地址,
2024-08-10 23:59:16
903
原创 arr的谜思
第一个打印的是数组首元素的地址,第二个打印的是整个数组的地址(尽管在内存布局上,这两个地址是相同的)。然而,在大多数表达式中,数组名会被转换为指向数组首元素的指针。但是,如果你想要强调的是你正在获取整个数组的地址(尽管这在大多数实际用途中并不常见),你可以使用。时,你实际上看到的是整个数组在内存中的起始位置,这与数组首元素的地址在数值上是相同的,但它们的类型意义不同。函数时,你可以打印出任何指针类型的值,包括指向数组的指针。时,你得到的是指向整个数组的指针,而不是指向数组首元素的指针。
2024-08-04 18:11:48
634
原创 c语言(7.22)
在7,23,79,81,103,127,131,147中查找数据*/核心思路:就是从数组的0索引开始,依次往后查找,如果找到了,就会返回数据对应的索引。如果没有找到,就会返回-1。//不是用mid和num进行比较。//2.定义变量表示要查找的数据。//2,定义一个要查的数据。/*需求:数组的二分查找。//mid应该放在循环里面。/* 需求:数组的基本查找。
2024-07-22 11:47:13
560
原创 c语言(7.21)
/原版:scanf_s("%d %d %d %d %d", &arr[0], &arr[1], &arr[2], &arr[3], &arr[4]);//定义一个数组,存入1,2,3,4,5,然后打乱数组中所有数据的顺序(本质上是随机交换两个变量)//注意:这个过程不是双向的,arr[0]=arr[4],此时arr[4]还是arr[4]//因为这样arr[len - 1 - i]的值并没有变,变的是temp的值。//随机数的范围正好是数组索引的范围。//交换:你给我,我给你。今天学习了反转数组,
2024-07-21 19:07:52
826
原创 c语言(7.21)
int contains(int arr[], int len, int num)//有重复,则输出1。//统计有多少个数比平均数小。
2024-07-21 17:31:17
598
原创 c语言之数组(7.20)
今天学习了数组中元素的访问数组的遍历数组中元素的访问int main()return 0;数组的遍历int main()i < 5;i++)return 0;
2024-07-20 18:16:54
377
原创 猜数小游戏
printf("猜对了\n");printf("猜大了\n");printf("猜小了\n");printf("请输入猜的数字:");//范围为1-100。
2024-07-19 11:18:14
612
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人