c语言解析系列(5)指针

来源:互联网 发布:网络名称侵权司法解释 编辑:程序博客网 时间:2024/06/05 03:12

F指针

地址形象的称为指针。一个已经定义的变量,想去引用它,有两种方式。一个是通过变量名,一个是通过访问该变量所在的地址。这就好比一栋房子的每个房间一样,你可通过门牌号找到这个房间的,对房间的东西进行操作,这个门牌号就是计算机给内存分配的地址,这是一种间接地方式。另外的方式就是直接找到这个房子的东西进行操作,这是一种直接的方式。

定义指针变量

类型名 *指针变量名

例:int *a

 想引用一个指针变量 ,可以采用这样的方式

 Int a=10

 Int *b=&aint *bb=&a

Printf(“%d”,*b);

一般就是先定义一个变量a,再定义一个同类型的指针变量b,给指针变量b一个指向b=*a即可。

下面的这个例子通过引用指针变量求最大值

#include<stdio.h>

int main()

{

   int a=10,b=5,*c,*d;

     c=&a;//给指针一个指向

     d=&b;

 if(*c>*d)

   printf("%d",*c);//输出该指针指向的内容

 else

  printf("%d",*d);

 getch();  

 return 0;   

}

指针其实给了我们很大的方便,给了我们随时随地取用变量的方法,就是找到存放变量的地址。

指针可以作为函数的参数,返回值一个是指针,一个是普通变量,对于字符型数组也是如此。


int *max(int *a,int *b)

{

 if(*a>*b)

  return a;

  else

  return b;   

}

int main()

{

   int a=10,b=5,*c,*d;

     c=&a;

     d=&b;

  c=max(c,d);

  printf("%d",*c);

 getch();  

 return 0;   

}

 

#include<stdio.h>

int max(int *a,int *b)

{

 if(*a>*b)

  return *a;

  else

  return *b;   

}

int main()

{

   int a=10,b=5,*c,*d;

     c=&a;

     d=&b;

  a=max(c,d);

  printf("%d",a);

 getch();  

 return 0;   

}


在下面的例子中还涉及到指针数组和数组指针的区别。指针数组一般是指向多维数组的。

指针数组:类型名 * 数组名 [数组长度]Int * p[4],[]的优先级比*高,所以这是一个指针数组,指向多维数组。

数组指针:类型名 *数组名 [数组长度],例int * p[4]

指针也可以多重的,这主要和多维数组有联系,这需要理解指针的跨步,即一步平移多少个字节。以二维数组为例,说明这个问题,这也是通过指针引用数组的例子。

#include<stdio.h>

int main()

{

 int a[2][3]={1,2,3,4,5,6};

 int *b,i,j;

 b=*a;//指针指向数组起始地址

 //多重指针每次移动是跨行的,

  for(i=0;i<2;i++)

  printf("%d\t",*(*(a+i)));

  //要想输出数组的每个数据要采用以下的方法

  printf("\n");

  for(i=0;i<2;i++)

  {

   for(j=0;j<3;j++)

   {

    printf("%d\t",*(*(a+i)+j));               

   }               

  }

 getch();

 return 0;   

}

通过指针引用字符串。

#include<stdio.h>

int main()

{

   int i;

 char a[]="qwertyuiop";

 char *b;

 b=a;

 for(i=0;a[i]!='\0';i++,b++)

 printf("%c",*b);

 getch();

 return 0;   

}