目录
1.法一
2.法2.
3.法3
错误
易错点
1.字符串
可以把字符串放到字符数组里面去
1.char arr[10]="abc";
char arr[10]={"abc"}//这两者是一样的
2.1.char arr1[]="abc";
2.char arr2[]={'a','b','c'};这两者是不一样的
3.char arr3[]={'a','b','c','\0'};这和arr1是一样的
printf("%s",arr);//%s是打印字符串的,截至到\0,而arr2打印出来的是错误的,无\0
同理strlen计算也是截至到\0,
3.printf("%d",strlen("c:\test\628\test.c"))//结果为14
计算的是""里面的,\t,\62,\t都是转义字符,
\ddd三。二。1位8进制数都被理解为转移字符转化为字符,如\101,\62,都是转义字符,而\628仅\62
是转义字符,8进制最高到7,
\xdd2位16进制数,也理解为转义字符
if语句
int main()
{
int a=0;
if(a=20)//a=20非0,if语句为真就会执行
{
printf("h");//h会成功打印
}
return 0;
}
关键字
typedef
关键字
typedef 类型重定义
typedef unsigned int u_int//u_int即新名字,unsigned int 为原来的类型名
int main()
{
//unsigned int -无符号整形
unsigned int a=10;//觉得每次都这样写很麻烦就可以对他起个名
u_int a=20;//与上面是一样的
return 0;
}
register
register//寄存器变量,只是起到一个建议作用
int main()
{
register int a=10;
&a;//寄存器变量是不能&的,&是从内存中取出来,而寄存器变量并非存在内存里面
return 0;
}
4.动态内存开辟
这个代码要辨证的看,如果动态申请的内存,不再使用,但是一直没有被释放,同时程序不结束就内存泄漏了。
如果代码能正常结束,那程序结束的时候会自动的回收堆区的空间的,所以就不泄露
1.练习一
求最大因数
int main()
{
int n;
scanf("%d", &n);
int i = 1;
int max = 1;
for (i = 1; i < n; i++)
{
if (n%i == 0)
{
max = i;
}
}
printf("%d", max);
return 0;
}
2.字符串反转
法1.
int main()
{
char sre[10] = "abcde";
int len = strlen(sre);
int i = 0;
for (i=0; i < len/2 ; i++)//;len=5,len/2=2,2也即是数组的中间值,交换数组的位置,亮亮交换
{
int t = sre[i];
sre[i] = sre[len - 1 - i];
sre[len - 1 - i] = t;
}
printf("%s", sre);
return 0;
}
法2.
void reverse()
{
char c;
scanf("%c", &c);//输入一个字符串,而读取时是在输入缓冲区一个一个读取,同理getchar也是
if (c != '\n')
{
reverse();//递归到回车前便回打印回车前的字符,一次再完回打印,实现字符倒叙
printf("%c", c);
}
}
int main()
{
printf("请输入字符串");
reverse();
return 0;
}
法3.
int main()
{
char str[] = "abcdef";
int i = 0;
int len = strlen(str);
for (i = len - 1; i >= 0; i--)
{
printf("%c", str[i]);
}
return 0;
}
错误示范
int main()
{
char str[10] = "abcdef";
int len = strlen(str);
int i = 0;
for (i = 0; i < len; i++)
{
str[i] = str[len - 1 - i];
}
return 0;
}
错误原因,在str从前往后对调时,当他过了一半值时,前一半的值就已经对调完成了,此时对后一半对调,对调的值是前一半,而此时的前一半以及是后一半的,所以后一半不变
int main()
{
char str[10] = "abcdef";
int len = strlen(str);
int i = 0;
for (i = 0; i < len/2; i++)
{
str[i] = str[len - 1 - i];
}
return 0;
}
只有前一半变后一半不变