1、例一
#include <iostream>
using namespace std;
int main()
{
int a = 10;
int *q = &a;
int *s =q;
cout<<"====================="<<endl;
cout<<"q is 0x"<<hex<<q<<endl;//q和a都指向a
cout<<"*q is "<<dec<<*q<<endl;
cout<<"s is 0x"<<hex<<s<<endl;
cout<<"*s is "<<dec<<*s<<endl;
s =(int *)calloc(1,sizeof(int));
cout<<"====================="<<endl;
cout<<"The address of a is 0x"<<hex<<&a<<endl;
cout<<"The value of a is "<<dec<<a<<endl;
cout<<"q is 0x"<<hex<<q<<endl;//q的指向未发生改变,还是指向a
cout<<"*q is "<<dec<<*q<<endl;//*q=a=10
cout<<"s is 0x"<<hex<<s<<endl;//s的指向发生变化
cout<<"*s is "<<dec<<*s<<endl;//初始值为0
*s = 5;
cout<<"====================="<<endl;
cout<<"s is 0x"<<hex<<s<<endl;
cout<<"*s is "<<dec<<*s<<endl;
system("pause");
return 0;
}
输出:
2、例二
#include <iostream>
using namespace std;
void fun(int* p1,int* p2,int *s)
{
cout<<"s is 0x"<<hex<<s<<endl;
cout<<"*s is "<<dec<<*s<<endl;
s =(int*)calloc(1,sizeof(int));
cout<<"s is 0x"<<hex<<s<<endl;
cout<<"*s is "<<dec<<*s<<endl;
*s = *p1 + *p2;
cout<<"*s is "<<dec<<*s<<endl;
free(s);
}
int main()
{
int a[2]={1,2},b[2]={10,20},*q=a;
fun(a,b,q);
cout<<"q is 0x"<<hex<<q<<endl;//q仍然指向a
cout<<"*q is "<<dec<<*q<<endl;
system("pause");
return 0;
}
输出:
从输出结果我们知道:q和s的最初指向都是指向a,但是经过s =(int*)calloc(1,sizeof(int));之后重新进行了内存分配,s的指向发生了变化,
但是q的指向并未发生变化,*s=11,也与q无关,q还是指向a,在函数fun()调用结束后,s已经释放,但它所指向的那块空间的值发生了变化,
但之后似乎也没有什么用处。
3、例三
int main()
{
const int i = 0;
int *j = (int *)&i;
*j = 1;
printf("i = %d,*j = %d\n",i,*j);//0,1
printf("The address of i is 0x%x.\n",&i);
printf("j is 0x%x\n",j);
system("pause");
return 0;
}
输出: