结构中的自引用指针和结构指针之间有什么区别?
struct abc
{
int data;
struct abc *next;
}
struct abc *pt;
*next
和*pt
之间有什么区别
他们的使用方式有何不同?
我对这两个
之间存在疑问我是初学者
第一个例子主要用于链表
指向结构节点和自引用指针的指针是否相同?
see-programming.blogspot.in/2013/05/chain-hashing-separate-chaining-with.html这里我们使用struct hash * hashTable作为数组..how ??我们可以用* pt
做同样的事吗答案 0 :(得分:4)
它们属于同一类型。他们的行为完全相同。
一些示例用法:
// declare 2 structs
struct abc s1;
struct abc s2;
// point pt to s1
pt = &s1;
// point s1.next to s2
s1.next = &s2;
// access pt->data
int a = pt->data;
// access s1.next->data
int a = s1.next->data;
使用差异:
只有一个pt
变量。
对于每个struct abc
变量,都有一个next
变量。
在链表的上下文中,只有一个头指针,因此pt
就是它。
但是每个节点都指向下一个节点,因此应该使用next
。
将指针用作数组?
是的,可以使用pt
或next
来完成此操作。
指针只指向内存中的地址。在该位置可以有任意数量的结构。
如果你想将它用作一个数组(或者只是一般使用指针),你只需要确保不要尝试访问你没有为其分配内存的元素(使用malloc
例如)并在使用后释放内存(如果您使用malloc
)。
使用数组的一些示例:
// declare a struct
struct abc s1;
// make an array of size 10
struct abc *a1 = malloc(10*sizeof(struct abc));
// give the 4th element a new value
a1[4] = s1;
// free the memory
free(a1);
我希望有所帮助。
答案 1 :(得分:1)
从概念上讲,差别很小。
next
是其指向的相同结构的成员。 pt
不是它所指向的结构的成员。next
您有一个现有的struct abc
,并且pt
可以直接使用。请考虑: myABC.next= &myOtherABC ;
pt= &myOtherABC ;
是指向结构节点和自引用指针同一事物的指针
他们是,他们不是。取决于观点。他们是因为他们都指向一个结构。它们不,因为pointer to structure
可以指向任何结构,作为变量,它可以是参数,局部变量,另一个struct
的成员等。但是self referential pointer
必须是struct
的成员,并且指向其所属的struct
。
答案 2 :(得分:1)
唯一的区别适用于编写编译器的人。这是因为自引用指针在完全声明之前引用自身。因此,编写编译器的人必须处理这种特殊情况。
作为程序员(意为你),没有任何区别,这些条款不提供任何额外的含义。
答案 3 :(得分:0)
它们是相同的类型,但它们不包含相同的值
从pt你可以访问下一个,因为pt指向包含next的结构。但从下一个你无法访问pt。
醇>对于链表,你必须要理解,该列表包含在开头的1个元素,而这个元素知道如何到达列表的下一个元素,它是下一个指针的目标
答案 4 :(得分:0)
这两个指针之间存在无差异。
使用上可能存在的差异取决于上下文,但仍然不适用于它们指向同一类型结构的性质,因此在分配,阅读和分配方面都遵循相同的规则。码运算。