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 */