一、变量的存储类型
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;
}