- 一、变量的存储类型
- 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;}
7月26日 学习日志
最新推荐文章于 2025-07-26 21:54:52 发布

954

被折叠的 条评论
为什么被折叠?



