c语言-指针


1、指针遍历一维数组

定义一个数组和一个指针,将a的首地址给p,然后让p进行++或者--。

2、指针实现元素逆置

对于一个数组a[10],定义两个指针,分别为p,q,p=a[0],q=a[9]再做一个do-while循环。
代码如下:
  do{
  //让t来作为中间介质达到交换*p和*q的值
   t=*p;
   *p=*q;
   *q=t;
   p++;
   q--;
  }while(p=q时结束`

3、指针将前m个数移动到最后

将前m个数进行逆置,再将后n-m个数逆置,最后整体逆置。
代码如下:
#include 
#define N 20
int main()
 {
    int a[N];
    int i,n,m,t,j=0; 
    int *p,*q;
    scanf("%d",&n);//输入整数个数
    for(i=0;i

4、用指针方法将n个整数按升序排列

1、选择法排序

第 1 趟在 n 个整数中,选出一个最小值和无序序列的第 1 个数交换;
第 2 趟在剩下的 n-1 个整数中,选出一个最小值和无序序列的第 2 个数交换;
以此类推,n 个数共选 n-1 趟。
并且每次循环指针指向剩下元素的第一个元素,由此找出最小值与前面的交换。
代码如下:
   #include
   #define N 20
   main()
   {
      int a[N],*p,t,*q,i=0;
      int n;
      scanf("%d",&n);
      for( p=a; p < a+n; p++)
      {
	    scanf("%d",p);
      }
/***** 用选择法排序 *****/
/********** Begin *********/
      q=&a[0];
     for(i=0;i

5、指针指向二维数组

有这样的一个数组a[N][M],则定义一个指向二维数组的行指针 (p)[M]=a,这里的(p)可看作是指向一维数组a[N],p的首地址是a[0]的首地址。
a[i]=a+i。
先定行,再逐列查找:*(p+i)+j)
或者定义一个列指针 p,让其指向数组的首个元素。则二维数组中的任意一个元素都可以用(p+i*M+j)来表示。
代码如下:
  for(i=0;i

6、指针数组

指针数组是一组有序的指针变量的集合。
指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。
指针数组说明的一般形式为:类型说明符 *数组名[数组长度]
对于一个二维数组a[N][M],则可用一个指针数组表示 int *p[N]。
即为一个指针数组中有M个指针,而每个指针都各自指向一个数组,故而直接对p进行加减,则移动的是一个数组的字节。
数组中的每个指针都被赋予了数组各行的首地址。
则要想换行,只需要对p进行++,换列则对*p进行++。
则用指针输入数组,如下:
相关代码如下:
  #include
  #define N 3
  #define M 5
  int main()
  {
     int a[N][M];
     int *p[N] ;//定义一个int型的指针数组
     int i,j,sum;
	 //给指针数组进行赋值
    for(i=0;i