C -指针如何获取变量,数组,指针,结构体的地址



代码到我的链表程序:这是我保存在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; 

但是如果我有两个指针(head &到struct node类型的结构体。现在我正在为node.

编写代码。
struct node {
    int data; 
    struct node *next;   // this is pointer to next element in the Linked List
};

现在最初头是NULL,即不指向任何东西head = NULL;

但是在第一次插入链表时,如果这样做:

head = temp;       // both are pointers

知道head只能取地址因为它是指针而temp不是数组所以如果写这个写temp并不意味着它是结构体temp的地址

我应该这样做吗

head = &temp

实际上得到那个临时结构(指针)的地址?

我有一种感觉,我们做head = temp和有效的原因,如数组temp是类型结构节点的指针。所以写temp只意味着内存中临时指针的地址。现在head指针的地址是temp &指向head有什么?

head指向temp的地址,还是head指向temp的地址,我猜指向和having是不同的

为了解释我的评论,请看下面的粗图:

对于head = temp,它看起来像

<>之前+------+| temp |——+------+ +----------------+>-> |你的结构|+------+ / +----------------+| head |——/+------+之前

这意味着headtemp都指向同一个位置。


另一方面,如果您执行head = &temp(并且编译器允许这样做),它将看起来像

<>之前+------+ +------+ +----------------+| head | -> | temp | -> | your structure |+------+ +------+ +----------------+之前

也就是说,head指向temp,而不是指向你的结构。

headtemp的类型均为struct Node*。将temp赋值给head意味着head所指向的位置与temp所指向的位置相同。&temp是指向struct NODE类型的temp变量的地址,即struct Node**

temp&temp是不同的类型。编译器应该对赋值

发出警告。
head = &temp;  // assigning incompatible pointer without cast

对于单个变量,无论是int还是char,操作符&用于引用该变量。在整数数组的情况下,数组的名称arr[]即arr本身代表数组的第一个元素的地址。下面是指针算术操作数组的内部操作:

引用第i个元素,我们写arr[i] = *(arr + i)因此,arr[0] = *(arr + 0) = *(arr)

但是在您的示例中,headtemp是类型为struct node*的指针。使用,将temp的地址赋值给head的运算符首先不会被编译器允许给出强制转换错误,而且它也不会满足您的目的。你应该做的是head = temp,这将使headtemp指向struct node

相关内容

  • 没有找到相关文章

最新更新