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

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

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

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

替代文字

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

int b = 17; /* the value of 'b' is stored at memory location 1462 */ 

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

 int *a; a = &b; /* the pointer 'a' is stored at memory location 874 */ 

编译器的工作就是知道“获取指针”的位置。 当您的源代码引用指针’a’时,编译器将其转换为 – >“无论地址值存储在内存位置874中”。

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

是。 下面我有一个int和一个指向int的代码和用于打印每个内存地址的代码。

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

32位系统上的指针占用4个字节。

看看这篇SOpost,以便更好地理解指针。 理解指针有什么障碍,克服它们可以做些什么?

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

在C:

 char *p = "Here I am"; 

p然后存储存储’H’的地址。 p是一个变量。 你可以指向它:

 char **pp = &p; 

pp现在存储p的地址。 如果你想获得pp的地址,那将是&pp等。

编译器处理将代码中的变量转换为机器指令中使用的内存位置。 指针变量的位置取决于它在代码中声明的位置,但程序员通常不必直接处理它。

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

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

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

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

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

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

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