指针

来源:互联网 发布:防sql注入最佳 编辑:程序博客网 时间:2024/06/05 00:38
  • 从0到1,回归基础,夯实基础 ,点滴积累,成就未来
#include <stdio.h>#include <stdlib.h>int main1()//定义函数的指针变量{    void fun(int x, int y, int(*p)(int, int));    int max2(int , int );    int min2(int , int );    int add2(int, int);    int a = 21, b = -9, n;    printf("choose 1,2 or 3:\n");    scanf_s("%d", &n);    if (n == 1)        fun(a, b, max2);    else if (n == 2)        fun(a, b, min2);    else if (n == 3)        fun(a, b, add2);}void fun(int x, int y, int(*p)(int, int)){    int result;    result = (*p)(x, y);    printf("%d\n", result);}int max2(int x, int y){    return x > y ? x : y;}int min2(int x, int y){    return x < y ? x : y;}int add2(int x, int y){    return (x + y);}//函数返回指针int main2(){    float score[][4] = { { 60, 70, 80, 90 }, { 56, 89, 67, 88 }, { 34, 78, 90, 66 } };    float *search(float(* pointer)[4], int n);    float *p;    int i, k;    printf("enter the number of stdudent:\n");    scanf_s("%d", &k);    p = search(score, k);//返回score[k][0]的地址    for (i = 0; i < 4; i++)        printf("%5.2f\t", *(p + i));//输出score[k][0]-score[k][3]    printf("\n");}float *search(float(*pointer)[4], int n)//返回score[k][0]的地址{    float *pt;    pt = *(pointer + n);//&score[k][0]    return pt;}int main3(){    float score[][4] = { { 60, 70, 80, 90 }, { 56, 89, 67, 88 }, { 34, 78, 90, 66 } };    float *search_score(float(*pointer)[4]);    float *p;    int i, j;    for (int i = 0; i < 3; i++)    {        p = search_score(score + i);//调用search函数,如果不及格返回score[i][0]的地址,否则返回NULL        if (p == *(score+i))//如果返回的是score[i][0]的地址,表示p的值不是NULL;        {            printf("No.%d socre;", i);            for (int j = 0; j < 4; j++)            {                printf("%5.2f ", *(p + j));//输出p[i][0]-p[i][j];            }            printf("\n");        }    }}float *search_score(float(*pointer)[4]){    int i = 0;    float *pt;    pt = NULL;    for (; i < 4; i++)        if (*(*pointer + i) < 60)            pt = *pointer;//如果有不及格课程,使pt指向score[i][]    return pt;}int main4()//指针数组{    void sort(char *name[], int n);    void print(char *name[], int n);    char *name[] = { "Follow me", "BASIC", "Great Wall", "FORTRAN", "Computer design" };    int n = 5;    sort(name, n);    print(name, n);    system("pause");    return 0;}void sort(char *name[], int n){    char *temp ;    temp = name[0];    int i, j, k;    for (i = 0; i < n - 1; i++)    {        k = i;        for (j = i+1; j < n; j++)           //选择排序法,下面没有大括号!!!!            if (strcmp(name[k], name[j])>0)//字符串比较用strcmp                k = j;            if (k != i)            {                temp = name[i];                name[i] = name[k];                name[k] = temp;            }    }}void print(char *name[], int n){    int i=0;    char *p = name[0];    while (i<n)    {        p = *(name + i++);        printf("%s\n", p);    }}int main5()//多重指针{    char *name[] = { "Follow me", "BASIC", "Great Wall", "FORTRAN", "Computer design" };    char **p;    int i;    for (int i = 0; i < 5; i++)    {        p = name + i;        printf("%s\n", *p);    }}int main()//动态分配内存{    void checkp(int *p);    int *p1, i;    p1 = (int *)malloc(5 * sizeof(int));    for (i = 0; i < 5; i++)        scanf_s("%d", p1 + i);    checkp(p1);    free(p1);    system("pause");    return 0;}void checkp(int *p){    int i;    for (i = 0; i < 5; i++)        if (*(p+i) < 60)            printf("%d ", *(p+i));    printf("\n");}
原创粉丝点击