Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 指针是否也有地址或内存分配?_C_Pointers - Fatal编程技术网

C 指针是否也有地址或内存分配?

C 指针是否也有地址或内存分配?,c,pointers,C,Pointers,如果指针存储变量的地址。。。那么我们从哪里得到指针呢 我问的是,如果我们直接使用指针,那么必须有一个位置,从那里我们可以得到这个指针?看看这篇文章,更好地理解指针。 就你的问题而言,如果我理解你想要什么,那么基本上,当你声明一个指针时,你指定一个地址或一个数字索引,分配给系统中的每个内存单元(通常是一个字节或一个字)。然后,系统提供一个操作来检索存储在该地址内存中的值。是。下面我有一个int和一个指向int的指针,以及打印每个int的内存地址的代码 int a; printf("address

如果指针存储变量的地址。。。那么我们从哪里得到指针呢


我问的是,如果我们直接使用指针,那么必须有一个位置,从那里我们可以得到这个指针?

看看这篇文章,更好地理解指针。


就你的问题而言,如果我理解你想要什么,那么基本上,当你声明一个指针时,你指定一个地址或一个数字索引,分配给系统中的每个内存单元(通常是一个字节或一个字)。然后,系统提供一个操作来检索存储在该地址内存中的值。

是。下面我有一个int和一个指向int的指针,以及打印每个int的内存地址的代码

int a;
printf("address of a: %x", &a);

int* pA = &a;
printf("address of pA: %x", &pA);
32位系统上的指针占用4个字节。

在C中:

char *p = "Here I am";
p
然后存储存储“H”的地址<代码>p是一个变量。您可以将指针指向它:

char **pp = &p;

pp
现在存储
p
的地址。如果您想获取
pp
的地址,该地址将是
&pp
等。

是的,声明的指针在内存中有自己的位置

在上面的示例中,您有一个变量“b”,它存储值“17”

创建指向该变量的指针时,指针将存储在其自己的内存位置中

int *a;
a = &b;       /* the pointer 'a' is stored at memory location 874 */
编译器的工作是知道“获取指针”的位置。当源代码引用指针“a”时,编译器将其转换为->“存储在内存位置874中的任何地址值”


注意:此图表在技术上不正确,因为在32位系统中,指针和int都使用四个字节。

编译器处理将代码中的变量转换为机器指令中使用的内存位置

指针变量的位置取决于它在代码中声明的位置,但程序员通常不必直接处理这个问题

函数中声明的变量存在于堆栈或寄存器中(除非声明为静态)

在顶层声明的变量位于程序顶部的内存段中

声明为动态分配的结构或数组的一部分的变量位于堆上

&
运算符返回变量的内存位置,但与
*
运算符不同,它不能重复

例如,
***i
获取地址
**i
处的值,这是地址
*i
处的值,这是存储在
i
中的值,编译器会找出如何查找该值

但是
&&i
不会编译
&i
是一个数字,它是编译器用于变量
i
的内存位置。这个数字没有存储在任何地方,因此
&&i
没有任何意义


(请注意,如果源代码中使用了
&i
,则编译器无法将
i
存储在寄存器中。)

重新标记post。红宝石?得了吧。就目前而言,你的问题几乎没有意义。我基本上回答了你的问题,其他几个人给你举了一些例子。您还需要其他东西吗?您可以从API或其他变量获取指针。如果您不初始化或为特定指针赋值,它可以指向任何地方。换句话说,您的直觉是正确的:指针值必须来自某个地方。在我的注释中用函数替换API。那么指向空字段的指针呢?特别是在递归抽象数据类型中。-我正在学习链表。链表实际上是无限多个指针(递归节点)。那些会占用内存吗?还是空值不占用内存?
int *a;
a = &b;       /* the pointer 'a' is stored at memory location 874 */