大家都应该知道, 指针是个什么玩意儿, 它就是用来存另一个变量的地址的。这玩意儿在程序中容易引起不易察觉的错误, 而且会给调试带来莫大的困难。 尽管如此,它现在依然存在着, 这就从另一方面说明了, 它的功能爆表。 在实现链式存储, 图, 树, 森林时, 大都要用指针。 不仅如此, 在访问多维数组,函数参数传递时, 也多用指针。下面给出指针的一些常用的用法代码。
/*指针的声明及一般用法*/ /*________________________________________________________________*/ //声明: 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/n", *ipointer1, *pointer2); } #include<stdio.h> int main() { int *p, q; p=&q; scanf("%d", p);//另类写法。 printf("%d/n", q); return 0; } //&*和*&的区别, &和*的优先级相同。运算顺序从左向右。 #include<stdio.h> int main() { int i; int *p; scanf("%d", &i); p=&i; printf("%d/n", *&i); printf("%d/n", i); printf("%d/n", *p); printf("%d/n", &*p); return 0; } //指针的自增自减。 #include<stdio.h> int main() { int i; int *p;//将变量i的地址赋给指针变量。 scanf("%d", &i); p=&i; printf("%d/n", p); p++;//指针变量加1, 这里的加 1 并不代表一个字节与*p的类型有关。 printf("%d/n", 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("/n"); 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("/n"); 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("/n"); } 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("/n"); } #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("/n"); 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("/n"); return 0; } // #include<stdio.h> int main() { char str1[]="you are beautiful", str2[30], *p1, *p2; p1 = str1; p2 = str2; while(*p1!='/0') { *p2 = *p1; p1++; p2++; } *p2='/0'; printf("Now the string2 is:/n"); puts(str2); return 0; }View Code