目录
易错点
1.字符串
2.if语句
3.关键字
typedef
register
4.动态内存开辟
易错点
1.字符串
if语句
关键字
typedef
register
1.练习一
求最大因数
2.字符串反转
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; }
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; }