Chinaunix首页 | 论坛 | 博客
  • 博客访问: 113973
  • 博文数量: 50
  • 博客积分: 968
  • 博客等级: 少尉
  • 技术积分: 492
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-17 09:51
文章分类

全部博文(50)

文章存档

2012年(2)

2011年(48)

我的朋友

分类:

2011-05-18 16:37:12

原文地址:C_指针(二) 作者:luozhiyong131

/*

*指针数组

*Lzy    2011-5-13

*/

#include

#include

 

int main()

{

    int X[3][3] = {{1,2,3},{4,5,6},{7,8,9}};/*定义一个二维数组并初始化*/

    //int X[3][3] = {1,2,3,4,5,6,7,8,9};

    int *P[3] = {X[0],X[1],X[2]};               /*定义一个指针数组*/  

    int *ptr;                                  /*定义一个指针变量*/

    int **p;                                   /*定义一个二级指针变量*/

    int i;

   

    ptr = P[0];                       /*一级地址给指针变量ptr*/

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

        printf("%d ",*ptr++);        /*打印?*/

 

    printf("\n----------\n");

 

    p = P;                         /*二级地址给二级指针变量p*/

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

        printf("%d ",**p++);     /*打印?*/

 

    printf("\n");

}

 

/*

*指向二维数组元素的指针变量

*Lzy   2011-5-13

*/

#include

 

int main()

{

    int data[2][3] = {1,2,3,4,5,6};     /*二维数组初始化*/

    int *ptr;

    ptr = (int *)data;                   /*强制转换*/

 

    for(; ptr < data[0] +6 /*ptr < data +2*/; ptr++)/*遍历二维数组*/

        printf("%d ",*ptr); 

 

    printf("\n");

    return 0;

}

 

/*

*指向一维数组的指针变量

*Lzy   2011-5-13

*/

#include

 

int main()

{

    int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};/*数组初始化*/ int (*p)[4]=a,*q=a[0];

    int i;

 

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

    { 

        if(i==0)

       (*p)[i+i/2]=*q+1;

    else

       p++,++q;

    }

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

       printf("%d,",a[i][i]);

    printf("%d,%d\n",*((int *)p),*q); 

    return 0;

}

 

3个学生各学4门课,计算总平均分,并输出第n个学生成绩

/*

*二维数组的指针作函数参数

*Lzy   2011-5-13

*/

#include

 

int main()

{

    void average(float *p,int n);

    void search(float (*p)[4],int n);

    float score[3][4]={{65,67,79,60},{80,87,90,81},{90,99,100,98}};

   

    average(score[1],4);

    search(score,1);

 

    return 0;

}

 

void search(float (*p)[4],int n)

{

    int i;

   

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

        printf("%5.2f\t",*(*(p+n)+i));

    printf("\n");

}

 

void average(float *p,int n)

{

    float sum = 0, aver;

    float *p_end = p + n;

 

    for(; p <p_end; p++)

        sum += *p;

    aver = sum / n;

    printf("aver = %5.2f\n",aver);

}

 

 

/*

*指针与字符串

*Lzy   2011-5-13

*/

#include

 

int main()

{

    char str[] = "I Love this girl!";

    char *ptr = str;

    printf("%s\n",ptr);

    printf("%s\n",ptr + 7);

    return 0;

}

 

/*

*用字符指针实现

*Lzy   2011-5-13

*/

#include

 

int main()

{  

    char *ptr = "I Love this girl!";

    printf("%s\n",ptr);

    printf("%s\n",ptr + 7);

    return 0;

}

 

/*

*用字符指针实现(注意)

*Lzy   2011-5-13

*/

#include

 

int main()

{  

    char *ptr = "I Love this girl!";

    *(ptr + 2) = 'l';         /*错误右边指向的是常量*/

    printf("%s\n",ptr); 

    return 0;

}

 

 

用函数调用实现字符串复制

/*

*用字符数组作参数

*Lzy   2011-5-13

*/

#include

 

void strcpy(char from[], char to[])

{

    int i = 0;

    while(from[i])

    {

        to[i] = from[i];

        i++;

    }

    to[i] = '\0';

    printf("%s\n",to);

}

 

int main()

{  

    char str1[] = "I Love ";

    char str2[] = "this girl!";

 

    strcpy(str1,str2);

    printf("%s\n",str2);

}

 

/*

*用字符指针作参数

*Lzy   2011-5-13

*/

#include

 

void strcpy(char *from, char *to)

{  

    while(*from)

    {

        *to = *from;

        putchar(*to);

        from++;

        to++;

    }

    *to = '\0';

    printf("\n");

}

 

int main()

{  

    char str1[] = "I Love ";

    char str2[] = "this girl!";

 

    strcpy(str1,str2);

    printf("%s\n",str2);

}

 

/*

*函数指针调用函数

*Lzy   2011-5-13

*/

#include

#include

 

void fun(int);                    /* 函数声明 */

 

int main()

{

  int x = 6;

  void (*p)(int);             /* 定义函数指针变量 */

  p = &fun;                       /* fun函数的首地址赋给函数指针变量p*/

  fun(x);                     /* 直接调用fun函数 */

  (*p)(x);                     /* 通过函数指针变量p调用fun函数 */

  return 0;

}

 

void fun(int x)                   /* 函数定义 */

{

  printf("%d\n", x);

}

 

用函数指针变量作参数,求最大值、最小值和两数之和

/*

*函数指针作函数的参数

*Lzy   2011-5-13

*/

#include

 

int add(int x, int y)

{

     return x+y;

}

int fun(int x, int y,int (*p)())

{

     printf("结果:%d\n",(*p)(x,y));

}

int main()

{

     int x, y;

     printf("输入两个数:");

     scanf("%d,%d",&x,&y);

     fun(x,y,add);

}

 

/*

*返回指针值的函数

*Lzy   2011-5-13

*/

#include

 

char * strcpy(char from[], char to[])

{

    int i = 0;

    while(from[i])

    {

        to[i] = from[i];

        i++;

    }

    to[i] = '\0';

    return to;

}

 

int main()

{  

    char str1[] = "I Love ";

    char str2[] = "this girl!";

   

    printf("%s\n",strcpy(str1,str2));

}

 

写一个函数,求两个int型变量中居于较大值的变量的地址

/*

*返回指针值的函数

*Lzy   2011-5-13

*/

#include

 

int * fun(int *a, int *b)

{

     if(*a > *b)

          return a;

     else

          return b;

}

 

int main()

{

     int a = 2, b = 3;

 

     printf("%x\n",fun(&a,&b)); 

     return 0;

}

 

/*

*指针数组

*Lzy   2011-5-13

*/

#include

 

int main()

{ 

     char *name[] = {"Follow me","BASIC","Great Wall","FORTRAN","Computer"};

     int i;

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

          printf("%s\n",name[i]);

}

 

/*

*野指针

*Lzy   2011-5-13

*/

#include

 

int main(int argc, char *argv[])

{ 

    int *p;

    p = (int *)malloc(sizeof(int));     /*在堆中分配内存空间*/

    *p = 0;

    printf("%d\n",*p);

    free(p);                           /*释放空间*/

 

    *p = 5;                                /*(危险)野指针*/

    printf("%d\n",*p);

p = NULL;

}

 

其他:1.编写一函数,用于接收3-10之间的一个数,然后输出由星号组成的正方形。例如,用户输入4,输出结果应为如下所示

****

*  *

*  *

****

/***************************************************

文件名:

  明:熟习函数的使用,完成打印正方形图形

 AutorLzy

 Time 2011-5-8

****************************************************/

#include

 

int init()

{

    int n = 0;

    while(n > 11 || n < 2)               /*判断输入是否合法,否则重新输入*/

    {

        printf("输入正方形的长度(大于2小于11):");

        scanf("%d",&n);

    }

    return n;

}

 

void fprint(int N)

{

    int i, j;

 

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

        printf("*");

    printf("\n");

 

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

    {

        printf("*");

        j = N - 2;

        while(j--)

            printf(" ");

        printf("*\n");

    }

 

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

        printf("*");

    printf("\n");

}

 

int main()

{

    int side;

    side = init();

    fprint(side);

}

 

2、编写一个函数,输入字符串内,如果是两个以上连续空格,则用一个空格代替

/******************************************

文件名:

  明:continue的使用

 AutorLzy

 Time 2011-5-9

*******************************************/

#include

 

int main()

{

    char c;

    char flag = 0;

 

    while((c = getchar()) != EOF)

    {

        if(flag == c)

            if( c == ' ')          

                continue;

        putchar(c);    

        flag = c;

    }

}

 

3、写一个函数找出一个整数数组中,第二大的数

#include

#define N 5

 

int main()

{

     int data[N] = {8,2,6,4,5};

     int i,j;

     int temp;

    

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

          for(i = j; i < N-1 ; i++)

          {

               if(data[j] > data[i+1])

               {

                     temp = data[j] ;

                     data[j] = data[i+1];

                     data[i+1] = temp;

               }

          }

    

          printf("%d ",data[N-2]);

     return 0;

}

——部分:Linux C

 

阅读(795) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~