看下面的例子:#include <iostream>,今天小编就来说说关于c语言一个指针可以有多个地址吗?下面更多详细答案一起来看看吧!

c语言一个指针可以有多个地址吗(在上下文中理解)

c语言一个指针可以有多个地址吗

看下面的例子:

#include <iostream>

#include <stdio.h>

#include <conio.h>

using namespace std;

main()

{

int var =1;

int *ptr; //①

ptr = &var; //ptr contains the address of var //②

cout << "ptr contains " <<ptr <<endl; //③

cout << "*ptr contains "<< *ptr <<endl; //④

int *Dptr; //⑤

Dptr = (int *)malloc(sizeof(int)); //⑥

*Dptr = *ptr 100; //⑦

cout << "Dptr contains " <<Dptr <<endl; //⑧

cout << "*Dptr contains "<< *Dptr <<endl; //⑨

getch();

}

运算结果:

ptr contains 0012FF44

*ptr contains 1

Dptr contains 00202DD8

*Dptr contains 101

The asterisk(*) is used in different contexts in the above program.

In ①, the * is uesd to define ptr as a pointer to an int.

In ④ , the * is used to access the value of the memory location, the address of which is in ptr.

在上面的程序中,星号(*)用于不同的上下文中。

在①处,*用来定义一个指向整形变量的指针ptr。

在④处,*用来访问指针变量ptr所指向的存储单元中的内容。

In ②, the program assigns the address of the variable var to the pointer variable ptr.

In ③ displays the address contained held in the pointer ptr.

In ④ displays the value at the address held in ptr by using the dereference operator *. This is called dereferencing the pointer ptr.

程序②处将变量var的地址赋值给指针变量ptr。

在③处,显示存放在指针变量ptr中的地址。

在④处,利用解引用运算符*显示指针变量ptr所指向的存储单元中的内容,称为指针变量ptr的解引用。

在⑥处,申请内存空间后返回一个指针。

两个指针指向的内存单元属于不同的内存区块,一个是栈区,一个是动态分配的堆区。

二维数组则需要两个**,或一个*与一个[],或两个[],才能得到数组的元素值。其余的表示法,只能得到数组元素的地址,*和[]是互通的。如下例:

#include <stdio.h>

#include <stdlib.h>

int main()

{

int i[][3]={10, 20, 30, 40, 50, 60};

int (*ptr)[3];

int a, b, total=0;

for(a=0; a<2; a )

for(b=0; b<3; b )

printf("&i[%d][%d]=%x\n", a, b, &i[a][b]);

printf("\n");

for(a=0; a<2; a )

for(b=0; b<3; b )

printf("i[%d][%d]=%d\n", a, b, i[a][b]);

ptr=i;

printf("\n");

printf("ptr=%x, *ptr=%x, i[0]=%x, i=%x, *i=%x\n", ptr, *ptr,

i[0], i, *i);

for(a=0; a<2; a )

for(b=0; b<3; b )

total = *(*(ptr a) b);

printf("Sum of array = %d\n", total);

system("PAUSE");

return 0;

}

运算结果:

&i[0][0]=12ff30

&i[0][1]=12ff34

&i[0][2]=12ff38

&i[1][0]=12ff3c

&i[1][1]=12ff40

&i[1][2]=12ff44

i[0][0]=10

i[0][1]=20

i[0][2]=30

i[1][0]=40

i[1][1]=50

i[1][2]=60

ptr=12ff30, *ptr=12ff30, i[0]=12ff30, i=12ff30, *i=12ff30

Sum of array = 210

*(ptr a)==ptr[a]=&ptr[a][0]

*(ptr[a] b)==ptr[a][b]

,