【发布时间】:2014-08-08 10:38:32
【问题描述】:
我的链表程序的代码:This is the code I saved on github
知道指针总是接受变量的地址。因此,如果有人只写数组的名称,则意味着那是数组第一个元素的地址。好的,这是地址,所以我们不需要在数组名称前面写&。但如果是其他任何东西,那么我们必须使用& 符号。因此,如果是int,我们会在它前面写上& 符号。但是如果结构也是某种定制大小的变量呢?
数组的代码可能如下所示:
int arr[] = {34,234,6234,346,2345,23};
int i;
for(i=0; i<(sizeof(arr)/arr); i++)
int *pointer = arr+i; //Now pointer can point to all the member array one by one
int 的代码可能如下所示:
int a = 5;
int *pointer = &a;
但如果我有两个指向struct node 类型结构的指针(head 和 temp)。现在我正在为节点编写代码。
struct node {
int data;
struct node *next; // this is pointer to next element in the Linked List
};
现在 head 最初是 NULL 即不指向任何东西 头=空;
但是在第一次插入链表时,如果这样做:
head = temp; // both are pointers
知道 head 只能获取地址,因为它是一个指针,但 temp 不是一个数组,所以如果写这个写 temp 并不意味着它是那个结构 temp 的地址
我应该这样做吗
head = &temp
要实际获取该临时结构(指针)的地址吗?
我感觉我们做了head = temp 并且像数组temp 这样的有效原因是结构节点类型的指针。所以写temp 仅仅意味着内存中临时指针的地址。现在head 指针的地址为temp 并指向head 的地址?
是head 指向temp 的地址还是head 现在具有临时地址。我猜指向和拥有是不同的。
【问题讨论】:
-
sizeof(arr)/arr是什么意思???你可能想要sizeof(arr)/sizeof(*arr)... -
指针在技术上是一个整数值,其中值是指针指向的地址。如果你想要例如
head指向temp指向的位置,直接赋值是你应该做的。如果使用 address-of 运算符,则告诉head指向temp变量,而不是temp指向的变量。 -
您似乎混淆了“事物的地址”和“不同事物的地址”。 any 对象
x的地址始终为&x。数组也是如此。但是另外数组表达式本身会衰减为一个指针——但是一种不同类型的指针!它衰减为指向第一个元素的指针。那是与阵列本身不同的动物。所以arr和&arr都存在并且有意义,它们只是不同的东西。 -
我认为你混淆了指针地址和指针指向的地址。
-
如果您觉得您的问题可能会被误解或得到一个过于正式的答案,粗体加斜体字体不会改变这一点……
标签: c arrays pointers linked-list