1、递归输出数字
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(int num)
{
if(num>=0 &&num<10)
{
printf("%d",num);
}else{
fun(num/10);
printf("%d",num%10);
}
}
int main(int argc, const char *argv[])
{
int m;
scanf("%d",&m);
fun(m);
putchar(10);
return 0;
}
运行结果为:
ubuntu@ubuntu:zy$ gcc z1.c
ubuntu@ubuntu:zy$ ./a.out
123456
123456
2、*与++优先级相同,运算顺序从右往左;
*p++:等同于*(p++),但由于后置++,于是先使用再自加,取*p的值为表达式的值,再将p加一;
++*p:等同于++(*p),先取出p的值,再加一作为表达式的值;
3、判断
const char *p:p可以改变,*p不能改变;
const (char *) p:p可以改变,*p不能改变;
char *const p:*p可以改变,p不能改变;
const char* const p:p和*p都不能改变;
char const *p:p可以改变,*p不能改变;
(char *) const p:*p可以改变,p不能改变;
char const* const p:p和*p都不能改变;
4、字符串逆置并去空格
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, const char *argv[])
{
char str[100];
gets(str);
int len = strlen(str);
char *p = str;
int i = 0;
int j = 0;
while(*(p+i))
{
if(*(p+i)!=' ')
{
*(p+j) = *(p+i);
j++;
}
i++;
}
*(p+j) = *(p+i);
puts(p);
int len1 = strlen(str);
char *end = p+len1-1;
int temp;
for(i=0;i<len1/2;i++)
{
temp = *(p+i);
*(p+i) = *(p+len1-1-i);
*(p+len1-1-i) = temp;
}
puts(p);
return 0;
}
运行结果为:
ubuntu@ubuntu:zy$ ./a.out
as df hg
asdfhg
ghfdsa
ubuntu@ubuntu:zy$ ./a.out
as fd g
asfdg
gdfsa
5、思维导图