大家都应该知道, 指针是个什么玩意儿, 它就是用来存另一个变量的地址的。这玩意儿在程序中容易引起不易察觉的错误, 而且会给调试带来莫大的困难。 尽管如此,它现在依然存在着, 这就从另一方面说明了, 它的功能爆表。 在实现链式存储, 图, 树, 森林时, 大都要用指针。 不仅如此, 在访问多维数组,函数参数传递时, 也多用指针。下面给出指针的一些常用的用法代码。

/*指针的声明及一般用法*/
/*________________________________________________________________*/
//声明:
int a;
int *p=&a;
int a;
int *p;
p=&a;
#include<stdio.h>
int main()
{
int a, b;
int *ipointer1, *ipointer2;
scanf("%d%d", &a, &b);
ipointer1 = &a;
ipointer2 = &b;
printf("The number is:%d %d
", *ipointer1, *pointer2);
}
#include<stdio.h>
int main()
{
int *p, q;
p=&q;
scanf("%d", p);//另类写法。
printf("%d
", q);
return 0;
}
//&*和*&的区别, &和*的优先级相同。运算顺序从左向右。
#include<stdio.h>
int main()
{
int i;
int *p;
scanf("%d", &i);
p=&i;
printf("%d
", *&i);
printf("%d
", i);
printf("%d
", *p);
printf("%d
", &*p);
return 0;
}
//指针的自增自减。
#include<stdio.h>
int main()
{
int i;
int *p;//将变量i的地址赋给指针变量。
scanf("%d", &i);
p=&i;
printf("%d
", p);
p++;//指针变量加1, 这里的加 1 并不代表一个字节与*p的类型有关。
printf("%d
", p);
return 0;
}
//一维数组与指针
int *p, a[10];
p=&a;
int *p, a[10];
p=&a[0];
#include<stdio.h>
int main()
{
int *p, *q, a[5], b[5], i;
p=&a[0];
q=b;//数组名就代表地址。
for(i=0; i<5; i++)
scanf("%d", &a[i]);
for(i=0; i<5; i++)
scanf("%d", &b[i]);
for(i=0; i<5; i++)
printf("%5d", *(p+i));
printf("
");
for(i=0; i<5; i++)
printf("%5d", *(q+i));
return 0;
}
#include<stdio.h>
int main()
{
int *p, *q, a[5], b[5], i;
p=&a[0];
q=b;
for(i=0; i<5; i++)
scanf("%d", p++);
for(i=0; i<5; i++)
scanf("%d", q++);
p=a;//使指针变量p,q 重新指向数组起始位置。
q=b;
for(i=0;i<5; i++)
printf("%5d", *p++);
printf("
");
printf("%5d", *q++);
return 0;
}
//二维数组与指针。
#include<stdio.h>
int main()
{
int a[3][5], i, j;
for(i=0; i<3; i++)
{
for(j=0; j<5; j++)
scanf("%d", a[i]+j);
}
for(i=0; i<3; i++)
{
for(j=0; j<5; j++)
printf("%5d", *(a[i]+j));
printf("
");
}
return 0;
}
//
#include<stdio.h>
int main()
{
int a[3][5], i, j, *p;
p=a[0];
for(i=0; i<3; i++)
{
for(j=0; j<5; j++)
scanf("%d", p++);
}
}
p=a[0];
for(i=0; i<3; i++)
{
for(j=0; j<5; j++)
printf("%5d", *p++);
printf("
");
}
#include<stdio.h>
int main()
{
int a[3][5], i, j, (*p)[5];
p=&a[0];
for(i=0; i<3; i++) //控制二维数组的行数。
for(j=0; j<5; j++) //控制二维数组的列数。
scanf("%d", (*(p+i))+j); //为二维数组中的元素赋值。
p=&a[1]; //*p为第一个元素的地址。
for(j=0; j<5; j++)
printf("%5d", *((*p)+j));//输出二维数组中的元素。
printf("
");
return 0;
}
#include<stdio.h>
int main()
{
int a[3][5], i, j;
for(i=0; i<3; i++)
for(j=0; j<5; j++)
scanf("%d", *(a+i)+j);
for(j=0; j<5; j++)
printf("%5d", *(*(a)+j));
printf("
");
return 0;
}
//
#include<stdio.h>
int main()
{
char str1[]="you are beautiful", str2[30], *p1, *p2;
p1 = str1;
p2 = str2;
while(*p1!='