C语言 变量的存储类型 和 指针(2)

一、变量的存储类型

1. register int a = 1;   //定义一个寄存器变量, a存放在寄存器中, 寄存器变量不能取地址

2. extern int a = 1;     //声明一个外部变量, 声明不用分配空间 (定义变量要分配空间)

3. static   (1) 在函数外部 static int a = 1;   // static 修饰全局变量, 改变变量的作用域, 只能在当前文件中被调用

                  (函数外部 int a = 1;   // a是全局变量, 其他文件也可调用)

               (2) static void print( );    // static 修饰函数, 改变函数的作用域, 只能在当前文件中被调用

               (3) 在函数内部 static int a = 0;   // static 修饰局部变量, 改变变量生命周期, 直到程序结束才被释放

                    例:

#include <stdio.h>

void add()
{
    static int a = 0;
    a++;
    printf("   %d", a);
}

int main()
{
    int i, a;

    for(i = 0; i < 5; i++)
    {
        add();
    }
    return 0;
}

运行结果为:1   2   3   4   5

若不加static, 运行结果为:1   1   1   1   1

二、指针练习

1.输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来.

(帧头和帧尾分别是head和tail  字符串”asdheadhauboisoktail”中headhauboisoktail是合法帧)

方法:参考上一篇比较字符串子串的方法 ,帧头和帧尾分别做比较 ,比较成功一次 ,cmp+1,两次都比较成功时 ,cmp = 2 ,此时输出帧头和帧尾以及中间的字符。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *find(char *str, char *head, char *tail)
{
    int len_str, len_head, len_tail;
    int i, j, k, n, cmp = 0;
    len_str = strlen(str);
    len_head = strlen(head);
    len_tail = strlen(tail);
    n = len_str - (len_head + len_tail);

    for(i = 0; i <= n; i++)
    {
        if(strncmp(str + i, head, len_head) == 0)
        {
            cmp++;
            break;
        }
    }
    for(j = i + len_head; j <= len_str - len_tail; j++)
    {
        if(strncmp(str + j, tail, len_tail) == 0)
        {
            cmp++;
            break;
        }
    }

    if(2 == cmp)
    {
        for(k = i; k <= j + len_tail; k++)
        {
            printf("%c", *(str + k));
        }
    }
}

int main()
{
    char *str = NULL;
    char *head = NULL;
    char *tail = NULL;
    str = (char*)malloc(sizeof(char)*20);
    head = (char*)malloc(sizeof(char)*10);
    tail = (char*)malloc(sizeof(char)*10);

    printf("Please input a string, head string, tail string:\n");
    scanf("%s%s%s", str, head, tail);

    find(str, head, tail);

    printf("\n");

    return 0;
}

2.使用指针将字符串排序 

方法:使用指针数组,每输入一个字符串就向操作系统申请一个空间 ,然后使用strcmp,逐个字符串比较,先让第一个字符串与后面所有的字符串比较 ,交换位置,再让第二个字符串与后面所有的字符串比较,交换位置......以此类推,直到比较结束。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void sort(char *str[], int n)
{
    char *temp; 
    temp = (char *)malloc(sizeof(char) * 50);
    int i, j;

    for (i = 0; i < n - 1; i++)
    {
        for (j = i + 1; j < n; j++)
        {
            if (strcmp(str[i], str[j]) > 0)
            {
                strcpy(temp, str[j]);
                strcpy(str[j], str[i]);
                strcpy(str[i], temp);
            }
        }
    }

    for (i = 0; i < n; i++)
    {
        printf("  %s", str[i]);
    }
}

int main()
{
    char *str[50];
    int n, i;

    printf("Please input n:");
    scanf("%d", &n);
    printf("Please input n string:");

    for (i = 0; i < n; i++)
    {
        str[i] = (char *)malloc(sizeof(char) * 20);
        scanf("%s", str[i]);
    }

    sort(str, n);

    printf("\n");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41998576/article/details/81218532