C语言学习记录(2)
序言
本文主要用于记录一些C语言的知识点/tips
知识点
连等
C中可以:1
2int a,b,c,d;
a=b=c=d=10;不可以:
1
int a=b=c=d=10;
语句和表达式的区别
字符串数组末尾有’\0’
整型数组末尾无’\0’bit是位 是指为0或者1。 byte是指字节,一个字节 =八个位.
编译预处理不是C语言的一部分,不再运行时间。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。
在函数中不可以再定义函数。
算法的是一定要有输出的,他可以没有输入。
关键字不可以作为用户标识符号。main define scanf printf都不是关键字。
2.333e-1就是合法的,且数据是2.333×10-1。
考试口诀:e前e后必有数,e后必为整数。‘0’的ASCII数值表示为48,’a’的ASCII数值是97,’A’的ASCII数值是65。
转义字符的考查:
在程序中 int a = 0x6d,是把一个十六进制的数给变量a注意这里的0x必须存在。
在程序中 int a = 06d,是一个八进制的形式。
在转义字符中,’\x6d’才是合法的,0不能写,并且x是小写。
‘\141’是合法的, 0是不能写的。%符号两边要求是整数。不是整数就错了。
scanf(“%d%d%*d%d”,&a,&b,&c);跳过输入的第三个数据。(存疑)
char a = getchar()是没有参数的,从键盘得到你输入的一个字符给变量a。
逻辑表达式:
只能为1(表示为真),或0(表示假)- 共有&& || ! 三种逻辑运算符号。
- !>&&>|| 优先的级别。
- 注意短路现象。考试比较喜欢考到。
while((c=getchar())!=’\n’) 和 while(c=getchar() !=’\n’)的差别(!= 的优先级高于 =)
因此第二个c=1或0a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。
a是一维数组名,所以它是列指针,也就是说a+1是跳一列。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16void f(int (*p)[3])//这个函数只能输出3列的二维数组
//(*p)[3] 中 (*p)是*(*p)的地址
{
printf("%d %d %d %d %d",
*(*p), //a[0][0]
*(*p+1), //a[0][1]
*(*p+1)+2, //a[0][1]+2
*(*(p+1)+2), //a[1][2]
*(*p)+1); //a[0][0]+1
}
int main()
{
int a[2][3]={10,20,30,40,50,60};
f(a);
}茴香豆的“茴”有几种写法:
1
2
3
4
5
6
7
8
9
int main()
{
int a[4][3]={{1,2,3},{4,5,6},{7,8,9},{123}};
printf("%d",*(*(a+2)+1));
printf("%d",(*(a+2))[1]);//输出8 此处[1]是行地址的偏移1([]是取值操作)
printf("%d",*(a+2)[1]);//输出123 此处[1]是列的地址偏移1([]是取值操作
printf("%d",a[2][1]);
}数组的初始化问题
字符串的 strlen() 和 strcat() 和strcmp() 和strcpy()的使用方法。他们的参数都是地址。其中strcat() 和strcmp()有两个参数。
strlen 和 sizeof的区别;
define f(x)(xx) 和 define f(x) xx 之间的差别。一定要好好的注意这写容易错的地方,替换的时候有括号和没有括号是很大的区别。
int *p;
p = (int *)malloc(4);
p = (int *)malloc(sizeof(int));以上两个等价
当心填空题目,malloc的返回类型是 void *函数的递归调用一定要记得有结束的条件,并且要会算简单的递归题目。要会作递归的题目
结构体和共用体以及链表要掌握最简单的。typedef考的很多,而且一定要知道如何引用结构体中的各个变量,链表中如何填加和删除节点,以及何如构成一个简单的链表,一定记住链表中的节点是有两个域,一个放数值,一个放指针。
两种重要的数组长度:
char a[]={‘a’,’b’,’c’}; 数组长度为3,字符串长度不定。sizeof(a)为3。
char a[5]={ ‘a’,’b’,’c’} 数组长度为5,字符串长度3。sizeof(a)为5。
String = a,b,c 字符串长度为四,包括终止符’0’.scanf 和 gets的数据:
如果输入的是 good good study!
那么scanf(“%s”,a); 只会接收 good. 考点:不可以接收空格。
gets(a); 会接收 good good study! 考点:可以接收空格。字符串的赋值
C语言中没有字符串变量,所以用数组和指针存放字符串:
1、char ch[10]={“abcdefgh”}; 对
2、char ch[10]=“abcdefgh”; 对
3、char ch[10]={‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’}; 对
4、char *p=“abcdefgh”; 错
5、char *p; 错
p=“abcdefgh”;
6、char ch[10]; 错了!数组名不可以赋值!
ch=“abcdefgh”;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main() {
char a[4]; // 需要足够的空间存放字符串"vbn"和终止符'\0'
char* p = a;
strcpy(p, "vbn");//字符串得这样赋
puts(p);
/*
char a[45]= "vbn";
char* p=a;
puts(p);
*/
/*
char a[45];
strcpy(a,"fghj");
puts(a);
*/
return 0;
}字符串赋值的函数:
1、while( (*t=*s)!=null ){s++;t++;}
2、while( *t=*s ){s++;t++;}
3、while( *t++=*s++);int *ptr = new int; // C++ // 或者 int *ptr = (int*)malloc(sizeof(int)); // C
1
2
3
4- 注意一些
``` c
x=1;
if(x=2) ……;//x=2 x==21
2
3
4
5
6
7
8
9
10
11
12
13
using namespace std;
int main(){
int i,b,k=0;
for(i=1;i<5;i++)
{
b=i%2;
while(b-->=0){
k++;
}//注意循环语句的嵌套
}
cout<<k<<','<<b;
}6,-2
tips
ASCII相关
C语言输出ASCII 219无法显示方格
SetConsoleOutputCP函数功能:用于设置控制台程序输出代码页。代码页是字符集编码的别名,也有人称”内码表”。
在程序中编写 SetConsoleOutputCP(437)这行代码才能正常显示128后面的ASCII值。
1 |
|