关于C#:指针和指针变量之间有什么区别?

What's the difference between a pointer, and a pointer variable?

我知道这很基本,但对我来说有点困惑。我读过:

a pointer is nothing more than an address, and a pointer variable is just a variable that can store an address.
When we store the address of a variable i in the pointer variable p, we say that p points to i.

1
int i, *p = &i;

p指向i

为了访问指针指向的对象,我们使用*操作符。

If p is a pointer then *p represents the object to which p currently points.

现在我很困惑,我应该怎么称呼p--指针或指针变量?

附加:指针是否始终与地址相同?


1.The difference between a pointer value and a pointer variable is implorated by:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int swap_int(int *i1, int *i2)
{
    int t = *i1;
    *i1 = *i2;
    *i2 = t;
}

int main(void)
{
    int  v1 = 0;
    int  v2 = 37;
    int *p2 = &v2;
    printf("v1 = %d, v2 = %d
"
, v1, v2);
    swap_int(&v1, p2);
    printf("v1 = %d, v2 = %d
"
, v1, v2);
    return 0;
}

这里是一个变量指针,它是一个指针。在另一个手上,在呼唤swap_int()时,&v1是一个指针值,但无意中是一个指针变量(在呼唤函数中)。这是一个指向变量的指针(变量是EDOCX1&22),但简单写入EDOCX1&21)并不是创建一个指针变量。Inside the called function,the value of the pointer &v1is asmissed to the local pointer variable i1,and the value of the pointer variable p2is asmissed to the local pointer variable i2,but that's not the saying &v1is a pointer variable(because it isn't a point简单的指针值。

然而,对许多目的而言,区别是虚假的。人们会说,这是一个指针,它是一个指针,它的价值是一个指针,它的价值是一个指针,它的价值是一个指针,它的价值是一个指针。你得到了同样的忧郁,是一个EDOCX1&3;,它实际上是一个EDOCX1&3;)变量及其价值是一个EDOCX1&3。


让我们用希望更熟悉的数据类型替换单词"指针",比如int

1
int n = 42;

这里42是一个int值,n是一个保存int的变量。你可以把n称为"int变量"。int是一个类似于42或-25315685的数字,而int变量保存这些数字。一旦你有了一个变量,你就可以给它分配不同的数字。到目前为止没有什么令人困惑的?

指针就像一个整数:一个数字。它碰巧是一个识别内存位置的数字,如果某个东西存储在该内存位置中,您可以称之为地址。与int类似,指针也可以存储在变量中。存储指针的变量可以称为指针变量。

那么,指针和指针变量有什么区别呢?第一个是一个值,就像一个数字,第二个存储这些值。但是,人们通常根据存储的值来引用变量;人们不称n为"int变量",只称int,尽管它可以在不同的时间存储不同的int变量。在本文中,当我指的是指针变量时,我将执行相同的操作,有时编写指针;希望区别是cl。耳朵。

指针总是地址吗?这是一个关于"地址"这个词含义的问题,比其他任何问题都要多。指针总是一个地址,在某种意义上,它以某种方式对应于一个内存位置,它是该内存位置的"地址"。但另一方面,如果程序无法访问内存位置,或者没有任何有用的存储内容,那么它真的是一个"地址"吗?

现在让我们研究以下代码:

1
2
int *p;
p = &n;

第一行声明一个名为p的指针变量。可以存储到p中的指针是int数据的内存位置;这一点很重要,我们稍后将看到。我们仍然不给p任何值,因此它存储的指针是任意的。它当然不会存储任何有用的地址;它甚至可能指向程序无法访问的内存区域。

在第二行中,我们用&操作符获取n变量的地址,并将其赋给p。现在,p存储n的地址,存储n值的内存位置。

我们能用指针做什么?我们可以读写指针标识的内存位置。为此,我们使用*运算符"取消引用"指针,然后可以像使用n一样使用(*p)。例如,您可以将一个新值写入n中:

1
*p = 123;

此时,很明显,我们需要知道p可以指向的数据类型:否则,您就不知道可以将什么分配给(*p)

了解p可以指向的数据类型很重要的另一个原因是指针算法。例如,p+1是指向存储在n之后内存中的int的指针;如果p是指向大数据结构的指针,p+1将是指向存储在它之后的同一类型数据结构的指针。为此,编译器必须知道指针指向的对象的大小。


是一个指针变量,这是一个变量EDOCX1。我们可以简单地称它为指针。

声明:

1
2
3
int* p;
int i;
p = &i;

作为一种类型的对象的标识。这通常作为'p is a pointer to i'更为简短。在p = &i表达式之后,可以重新计算变量i。使用指针p获得变量i的价值,你可以使用*(E.G.*p)。与*p = 10;相等。

另一方面,p = &i;表达式通告,以读取i的地址。

一个指针只是一个逻辑地址(一个可参照变量的标识符)。标准C不确定指针是内部的,指针是如何在内部工作的。

如果没有记忆地址,准确地说是什么?Additionally,read this:to understand the purpose of pointers.


变量是存储价值的地方。在C中,当你在一个需要一个值的上下文中使用一个变量时,则检索变量的价值,在这个上下文中,表示"P"是相同的,即"变量P的价值":

ZZU1


该术语的指针和指针变量经常使用同义词。


指针:一个变量,其值是另一个变量的地址。

指针变量:包含存储另一个变量、数据值或函数的内存位置或地址的变量。