p=p1;p1=p2;p2=p; } /*交换的是地址不是地址里面的内容*/
这句话的意思是交换p1 p2的指向 就是说 原来 p1 指向a p2 指向b 交换后 p1 指向b p2 指向a 指针是一个4个字节的空间 里面存放指向位置地址 C语言指针是个难点 scanf("%d",&a) 这里 也是取a的地址 跟scanf的源代码有关它要传入的就是一个指针
指针这类考题很容易出现的就是给你一个函数 例如
void swap(int *a,int *b)
{
int *p;
p=a;
a=b;
b=p;
}
问你 main函数里 a b指向的数会不会变 答案是不会变得。。
void swap(int *a,int *b)
{
int p;
p=*a;
*a=*b;
*b=p;
}
是会变得
这个写法其实就是 scanf("%d%d",&a,&b);
上面这个写法你应该看的懂吧?
所以说,scanf(...)后面的参数,就是你要输入的那个变量的地址啊!
而scanf("%d%d",p1,p2);也刚好就是a 和b的地址。
你的意思可能是P1,P2是指针变量,为什么能赋值吧?是这样的P1,P2是指针变量,它们不是地址,只是指向了一个地址(注意,是“指向”而不是“是”),当你对P1赋值a时,a就存放在P1所指向的地址里了。指针的类型实际上指的是该地址能存放变量的类型,
第一,地址本来就是整型数,只是一般表示为十六进制的;第二,scanf("%d%d",p1,p2)函数中,p1,p2是存储整型变量的地址,建议仔细理解scanf()和指针。
那个是整型存放到 p1 p2 所指向的内存地址,这个意思,交换地址实际上也就是交换了指向的内容。