C语言 指针的使用

//

//  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 个字符,写一个函数,将此字符串从 m m<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;

//}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值