看下面的例子:#include <iostream>,今天小编就来说说关于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]
,