我们定义 int *p=&i , 则有:
&i :
- &是取地址运算符,&i 表示取i的地址。
- 使用%p输出。
*p :
- 表示指向存储i的地方,引导我们找到 i。
- 使用 %b 输出,会输出 i 的值。
- 但如果我们要给 *p 赋值,我们要给它一个地址,而不是值。
p :
- 指针变量名。
- 使用%d输出时会得到一串没有意义的数字。
- 用 %p 输出时会输出 i 的地址。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void f(int *p, int* q);//我传进来的是一个地址 p=&i
void g(int k);//k=i
int main(void)
{
int i = 6,*p=&i;
int j = 3,*q=&j;
printf("i=%d\n", i);//输出了i=6
printf("&i=%p\n", &i);//输出&i=000000A75BBBFBA4
printf("p=%d\n", p);//p=%d输出了p=1539046308,显然这只是一串没有意义的数字
printf("p=%p\n", p);//p=%p输出了p=000000A75BBBFBA4,显然这是地址,而且是&i的地址
printf("*p=%d\n", *p);//输出*p=6
printf("j=%d\n", j);
printf("&j=%p\n", &j);
printf("q=%d\n", q);
printf("*q=%d\n", *q);
printf("through the f()and g()\n");
f(&i,q);
g(i);
return 0;
}
void f(int* p,int *q)
{
printf("p=%p\n", p);//p的值就是i的地址
printf("*p=%d\n", *p);
*p = *q;
printf("经过*p = *q之后,*p=%d\n", *p);
}
void g(int k)
{
printf("k=%d\n", k);
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void swap(int* pa, int* pb);
int main(void)
{
int a = 5;
int b = 6;
int* pa=&a, * pb=&b;
printf("&a=%p &b=%p\n", &a, &b);
printf("pa=%p pb=%p\n", pa, pb);
printf("a=%d.b=%d\n", a, b);
swap(&a, &b);
printf("&a=%p &b=%p\n", &a, &b);
printf("pa=%p pb=%p\n", pa, pb);
printf("a=%d.b=%d\n", a, b);
return 0;//结果仍然只是a,b的结果互换了,并不是位置互换
}
void swap(int *pa,int *pb)
{
int t = *pa;
*pa = *pb;
*pb = t;
}