转载

指针的用法

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

指针的用法
/*指针的声明及一般用法*/ /*________________________________________________________________*/  //声明: 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
正文到此结束
Loading...