*p = *p1 * (*p2) 就是指针p1和p2指向的地址单元中存放的数据相乘,并把结果存放到指针p指向的地址单元内。
举个简单的例子:
int *p = (int *)malloc(sizeof(int)); // 申请内存空间 地址为0x002d14f8
int *p1 = (int *)malloc(sizeof(int)); // 申请内存空间 地址为0x002d1538
int *p2 = (int *)malloc(sizeof(int)); // 申请内存空间 地址为0x002d1578
*p1 = 2; // 赋初值(存到地址为0x002d1538的内存区)
*p2 = 3; // 赋初值(存到地址为0x002d1578的内存区)
*p = *p1 * (*p2); // 运行结果为6(存到地址为0x002d14f8的内存区)
注:内存地址是经过调试后知道的。
你首先要懂一点指针的基本知识;
1.int *p1=&a,*p2=&b;
则表示p1和p2是两个指针,分别指向变量a和b。
int *p;表示p也是指针,指向不明(所以这里指向不明,是不好的,要给p赋值)。
2.*p和*p1,*p2代表指针指向的内容,即未知和a,b
3.*p=*p1*(*p2);要注意第3个*是代表乘号,其余是指针的用途
*p=*p1*(*p2)就代表*p=a*b
*p=*p1*(*p2);
的意思是把p1指向的变量与p2指向的变量相乘,
把结果存到p指向的变量中。
由于没有对指针p赋值,程序可能导致系统出现异常,报错。
调试环境应该会收到警告信息。
p1 指向a
p2 指向b
因此输出的应该是1*3 = 3
就是将1赋值给a,将3赋值给b,将5赋值给c
将a的存储地址赋值给p1,将b的存储地址赋值给p2,将c的存储地址赋值给p3
然后将p1存储的地址指向的变量的值乘以p2存储的地址指向的变量的值
将得到的结果存到p存储的地址所指向的位置
然后输出p存储的地址所指向的位置里存储的值
方法结束
*p=*p1*(*p2);
就是相当于 *p=a*b=3