C语言——指针习题
写一篇好博文很难
为了更好的理解指针中几个不容易清楚的概念:指针数组,数组指针,函数指针,指针函数,利用函数指针回调函数。
1.使用指针数组,用不定长的字符串初始化,最后一个字符串以@结尾,输出所有的字符串,并删除最后的@字符。
例如:
输入:aaaaa bbbbb abcdefg asdf@
输出:
aaaaa
bbbbb
abcdefg
asdf
1 #include <stdlib.h> 2 #include <string.h> 3 int main(int args,const char *argv[]) 4 { 5 char *p[10] = {NULL}; 6 int cnt = 0;//记录输入了多少个字符串 7 //申请堆内存空间 8 for(int i=0;i<10;i++) 9 { 10 //申请一个100个char类型的内存空间 11 p[i] = (char *)malloc(100*sizeof(char)); 12 //判断申请成功 13 if(!p[i]) 14 { 15 return -1; 16 } 17 scanf("%s",p[i]); 18 cnt++; 19 //判断字符串最后一个字符是否位 '@' 是:替换位'\0' 20 int len = (int)strlen(p[i]); 21 if(*(*(p+i)+(len-1)) == '@') 22 { 23 *(*(p+i)+(len-1)) = '\0'; 24 } 25 // if(p[i][len-1] == '@') 26 // { 27 // p[i][len-1] = '\0'; 28 // } 29 //当读取到单个字符位'\n'时,跳出循环 30 if(getchar() == '\n') 31 { 32 break; 33 } 34 } 35 36 for(int i=0;i<cnt;i++) 37 { 38 printf("%s\n",p[i]); 39 } 40 return 0; 41 }
2.
利用函数指针回调函数
随意定义三个函数,利用函数指针调用该三个函数,输入一个n,打印n次该函数
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <stdlib.h> 2 #include <string.h> 3 void p_world(void) 4 { 5 printf("world\n"); 6 } 7 void p_hello(void) 8 { 9 printf("hello\n"); 10 } 11 void p_welcome(void) 12 { 13 printf("welcome\n"); 14 } 15 //利用函数指针回调以上的三个函数 16 void print(void (*pfunc)(void),int cnt) 17 { 18 for(int i=0;i<cnt;i++) 19 { 20 pfunc(); 21 } 22 } 23 int main() 24 { 25 int n = 0; 26 printf("回调次数:"); 27 scanf("%d",&n); 28 //申明一个指针数组,存放函数名(函数地址) 29 void *pf[3] = {p_world,p_hello,p_welcome}; 30 char *str[3] = {"p_world","p_hello","p_welcome"}; 31 char *inputstr = NULL; 32 inputstr = (char *)malloc(100*sizeof(char)); 33 if(!inputstr) 34 { 35 return -1; 36 } 37 printf("回调的函数名称:"); 38 scanf("%s",inputstr); 39 for(int i=0;i<3;i++) 40 { 41 if(!strcmp(str[i], inputstr)) 42 { 43 print(pf[i], n); 44 } 45 } 46 //释放内存空间 47 free(inputstr); 48 inputstr = NULL; 49 return 0; 50 }
内容原创-可转载-请保留原地址