C语言 指针的使用

来源:互联网 发布:iris网络嗅探器下载 编辑:程序博客网 时间:2024/05/16 05:16

//

//  main.c

//  指针

//

//  Created by  on 12-12-10.

//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.

//


#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#define COUNT 100

#define MAX(A,B) A>B?A:B

#define SUM(X,Y) (X+Y)




enum WeekDay

{

    Monday =0,

    Tuesday,

    wednesday,

    Thuesday,

    Friday,

    Saturday,

    Sunday


}day1,day2;


//1

void swap(int *p,int *q)

{

    int temp;

    temp = *p;

    *p = *q;

    *q = temp;

}


//2

void swapStr(char *p,char *q)

{

    char temp;

    temp = *p;

    *p = *q;

    *q = temp;

}


//5求字符串长度函数

int strLength(char str[],char *p)

{

    p = str;

    while (*p!='\0') {

        p++;

    }

    

    return p-str;

}


//6

void strCpy(char *p,char *q,int m)

{

    p = p+m-1;

    while (*p !='\0') {

        *q++ = *p++;

    }


}


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

{


    

    int array[COUNT];

    

    printf("%d = ",SUM(3, 4)*4);

    

    void *p;                     // 泛型

    int a = 10;

    p = &a; 

    printf("%d",*(int *)p);

    

    char ch = 'a';

    p = &ch;

    

    printf("%c\n",*(char *)p);

    

    

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

        static int a=0;

        int b = 0;

        printf("a == %d b = %d\n",a++,b++);

    }

    

//    常量 指针  指针常量 ************************************************

    

    // 常量 指针

    int const x = 10; //常变量

    int f = 5;

    int const * m = &f; //常量指针,指针指向的内容不可以改变,指针的指向可以改变

    // *m = 12;         // 错误 ,会报错 指针内容 不能 改变

    m = &x;             //指针指向的内容不能通过 该指针 改变 ,但是 指针的指向 可以改变

    

    

    //指针常量

    int * const q = &f; //指针常量指针的指向不能改变,但是指针的内容可以改变

    *q = 2;             //指针的内容 可以 改变

    //q = &x;             //错误指针指向 不能改变

    

    

    enum WeekDay day3 = Monday;

    typedef enum WeekDay newWeekDays;

    

    newWeekDays day4 = Friday;

    

    switch (day4) {

        case Monday:

            printf("星期四:");

            break;

        case Friday:

            printf("星期五:");

            break;

            

        default:

            break;

    }

    

    printf("%d,%d",day3,day4);

    void printDay(enum WeekDay day1);

    printDay(day1);

    

    // insert code here...

    //指针

    

//    int i=10,j=3;

//    int *p;

//    p = &i;

//    int * q =&j;

//    printf("*p = %d *q=%d",*p,*q);   //result :10 3

    

//    int a=10;

//    int *p;

//    p=&a;

//    printf("a=%d,p=%p,&a=%p,&p=%p,*p=%d,&*p=%p,*&a=%d,",a,p,&a,&p,*p,&*p,*&a);

//    

//    

//    int i=10,j=3;

//    void changeValue(int *x,int *y);

//    changeValue(&i,&j);

//    

//    printf("i=%d j=%d",i,j);

//    

//    int x;

//    int getValue(int *a,int b);

//    int value = getValue(&x, 3);

//    printf("value=%d,x=%d",value,x);

    

    

    

//    

//    int array[5]={3,4,5,7,8};

//    int * p =array;

//   

//    for (int i=0; i<5; i++) {

//        printf("array[%d] = %d\n",i,*(p++));

//    }

//    

//    *(p+4) = *(p+2) + *(p+3);

//    printf("array[4] = %d\n",*(p+4));

//

//    char * q= "Hello";

//    while (*q!='\0') {

//        printf("%c",*q);

//        q++;

//    }

//    // 字符 数组 从控制台 输入

//    char a[30];

//    scanf("%s",a);

//    printf("%s",a);

   

    /*

    

    char * stre = malloc(sizeof(int)); //申请内存 

    printf("请输入字符串:\n");

    scanf("%s",stre);

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

    free(stre);  //  释放 内存

    stre = NULL; //置为 防止 出现 野指针                         

    

    char str1[3][10] = {

        "iPhone",

        "android",

        "symban"

    };

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

        printf("str1[%d] = %s\n",i,str1[i]);

    }

    

    //指针数组

    char * str[] = {"iPhone","android","symban"};

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

        printf("str[%d] = %s %s\n",i,str[i],*(str+i));

    }

    

     */

    

    

    /*

    // 1、指定 3整数,按由大到小的顺序输出。

    int a,b,c;

    printf("输入三个整数:\n");

    scanf("%d%d%d",&a,&b,&c);

    if (a<b) {

        swap(&a , &b);

    }if (a<c) {

        swap(&a ,&c);

    }if (b<c) {

        swap(&b ,&c);

    }

    

    printf("%d,%d,%d",a,b,c);   //result:输入三个整数:

                                             //23 4 30

                                              //30,23,4

    

    */

   

    /*

    //2、定义3字符串,按由大到小的 顺序输出

    

    char str1[20],str2[20],str3[20];

//    char *point1,*point2,*point3;

//    point1 = str1;

//    point2 = str2;

//    point3 = str3;

    printf("输入三个字符串:\n");

    scanf("%s,%s,%s",str1,str2,str3);

//    gets(str1);

//    gets(str2);

//    gets(str3);

    if (strcmp(str1, str2)<0) {

        swapStr(str1 , str2);

    }if (strcmp(str2, str3)<0) {

        swapStr(str2 ,str3);

    }if (strcmp(str1, str3)<0) {

        swapStr(str1,str3);

    }

    

    printf("%s %s %s",str1,str2,str3);

    

    */

    

   // 3、有 n个整数(可用数组表示)使前面个数顺序向后移 m 个位置,把移出的 m 个数放在最前面。写一个函数实现以上功能,主函数中输入n个整数,输出是 调整后的n个整数。

    

    

    

   //4、有n个人围成一圈,顺序排号。从第一个人开始报数(从 1 3报数),凡是报到 3的人推出圈子,问最后 留下的是原来的第几号?

    

    

    

    /*

    //5、写一个函数,求一个字符串长度,在main函数中输入字符串,并输出其长度

    

    char str[30];

    char *p = str;

    printf("输入一个字符串:\n");

    //gets(str);

    scanf("%s",str);

    int length = strLength(str, p);

    printf("字符串str%s长度为:%d",str,length);

    */

    

    /*

     

    //6、有一字符串,包含 n个字符,写一个函数,将此字符串从 mm<n)个字符开始的全部字符,复制到另一个 字符串

    

    

    int m,n;

    char *p,*q;

    printf("请输入n的值:\n");

    scanf("%d",&n);

    p = malloc(sizeof(char) *(n+1));

   // p = malloc(2);

    scanf("%s",p);

    printf("请输入m的值:\n");

    scanf("%d",&m);

    q = malloc(sizeof(char) *(n-m+2));

                       

    strCpy(p,q,m);

    printf("q ==== %s\n",q);

    puts(q);

    free(p);

    free(q);

//result:                       

//    请输入n 的值:

//    9

//    sdlkfjsfsd

//    请输入m 的值:

//    4

//    q ==== kfjsfsd

//    kfjsfsd


*/

    

    /*

    //7、输入一行文字,找出其中 大写字母,小写字母,空格、数字及其他字符各有多少。

    

    char str[100];

    char *p;

    //char a = ' ';

    int daxie=0,xiaoxie=0,kongge=0,number=0,qita=0;

    printf("输入字符串:\n");

   // printf("%d",a);

//    scanf("%s",str);

    gets(str);

    for (p= str; *p!='\0'; p++){

        if (*p <='Z'&& *p >= 'A')

        {

            daxie ++;

        }

        else if (*p<='z' && *p>='a') {

            xiaoxie++;

        }        

        else if (*p<=57 && *p>=48) {

            number++;

            

        }

        else if (*p == 32) {

            kongge++;

        }

        else {

            qita++;

    }

    

    printf("daxie = %d\nxiaoxie = %d\nkongge = %d\nnumber = %d\nqita = %d",daxie,xiaoxie,kongge,number,qita);

    

    */

   //8、在主函数中指定 10等长字符串,用另一个函数对他们排序。然后在主函数输出这 10 个已经排好 的字符串

   //9、用指针数组 处理上一题目,字符串 不等长

    

    return 0;

}


int maxValue(const int *a,const int *b){


    if (*a>*b) {

        return *a;

    }

}


void printDay(enum WeekDay day1)

{

    if (day1 == Monday) {

        printf("星期一。");

    }


}


//

//void changeValue(int *x,int *y){

//    

//    int temp;

//    temp = *x;

//    *x = *y;

//    *y = temp;

//}

//int getValue(int *a,int b)

//{

//

//    int num =5; //    *a=num;

//    num+=b;

//    return num;

//

//}


//void changeValue2(int *x,int *y){

//    

//    int *temp;

//    temp = x;

//    x = y;

//    y = temp;

//}









原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 上海众非称重不显示数字怎么办 宝骏630防火墙隔热棉掉了怎么办 冷车启动水温报警灯亮了怎么办 租铺位面积比合同面积小怎么办 农村村民建房领居不肯签名怎么办 车祸死者家属不来协商赔偿怎么办 26岁想回去当老师了怎么办 面包车排量小空调带不凉快怎么办 科三包过不给退钱人跑了怎么办 护师职称考试成绩单丢了怎么办 河南二级建造师报名地址填错怎么办 山东以前的企业没有消防备案怎么办 重庆渝北初级审核时间过了怎么办 初级职称复核毕业证弄丢了怎么办 杭州公租房选房后变更单位的怎么办 契税交了贷款办不下来怎么办 天津公租房住满5年后怎么办 大江里钓鱼水流太急立不住漂怎么办 房子定金交了不想要了怎么办 房子付了首付不想要了怎么办 三国大时代4王越死了任务怎么办 红米2卡顿反应慢怎么办 国税和地税合并新进的公务员怎么办 买车合格证不给我们要怎么办 初级会计报名信息表填写错误怎么办 跨国快递需要收件人自行清关怎么办 腋下有异味怎么办邀约成都真愛 腋下有异味怎么办犀利成都真愛 腋下有异味怎么办有信成都真愛 成都车牌网上选号次数用完了怎么办 在志愿服务中遇到突发状况怎么办 商铺没有房产证不能办理消防怎么办 亳州办事大厅登录密码忘记了怎么办 户口已迁出结婚证丢了怎么办 户口已迁出多年结婚证丢了怎么办 芜湖长信正式工没转正怎么办辞职 买到9个月库存车怎么办 买到5个月库存车怎么办 把4s店新车撞了怎么办 网址导航已取消打不开网页是怎么办 如果邦华手机充电口有杂物怎么办?