我现在对C语言很着迷,我正试图破解指针的错误。我有Python、Ruby的经验,但这些东西对我来说很奇怪。我偶然发现了这篇文章:
https://www.geeksforgeeks.org/applications-of-pointers-in-c-cpp/
我确实理解它的基本概念,但当涉及到现实生活中的实现时,我有点困惑。我确实理解使用指针的动态内存分配,也可以通过引用从链接传递参数(交换示例(,但当涉及到访问数组时,我有一个问题——如果arr[2]
和*(arr + 2)
是同一个东西,那么指针在这里的意义是什么?是否有性能优势?还是这只是一种不同的写作方式?
这里的指针的点是什么
在C中,当表达式中使用的数组名称不是&
或sizeof
运算符的操作数时,则称该数组名称为";衰变;指向指向数组的第一个元素的指针。
简单来说,这只是意味着数组名称将隐式转换为指向数组第一个元素的指针"衰变;只是指类型和维度信息的丢失。
例如:
int x[2] = {2, 4};
int *y = x;
在本例中,我们声明并初始化指针y
。当我们引用数组名称CCD_ 6时;衰变";指向指向第一个元素的指针。它还丢失了类型信息(不再是int [2]
(和维度信息(2
(。在这种情况下,y
指向x
的第一个元素。
我们也可以通过与*(x+i)
相同的x[i]
来引用数组。请注意,在第二个表达式中是如何引用数组的名称的,我们可以将i
添加到x
,并转到数组中的第x[i]
个元素。
我已经有一段时间没有做C编程了,但当我使用时,我从Standford的免费库中发现了这个出色的链表问题,这有助于建立我的理解-http://cslibrary.stanford.edu/105/LinkedListProblems.pdf
链表使用指针,这是建立你对指针理解的一种很好的方式。基本上,当您使用数组时,需要提前声明大小。这可能并不总是可能的,这就是指针派上用场的地方。