初学C语言时一些易混易忘知识
2014-11-16 12:20
267 查看
零基础开始学C语言,这是我在看谭浩强的《C语言程序设计》第四版时,一些易混易忘的知识:
1.①优先级关系:!(非) >
算数运算符 > 关系运算符
> &&和||
> 赋值运算符
②条件运算符的优先级别比关系运算符 和 算数运算符 都低,例:
max = (a > b) ? a : b
括号可以不要,可写成
max = a > b ? a : b
如果有
a > b ? a : b + 1
相当于a > b ? a : (b + 1),而不相当于(a > b ? a : b) + 1。
2.C系统在用字符数组存储字符串常量是会自动加一个'\0'作为结束符。例如:
char c[ ] = "I am happy";
请注意,此时数组长度不是10
,而是11。
3.①
strcat 函数---字符串连接函数
一般形式为
strcat(
字符数组1 , 字符数组2 )
② strcpy
和 strncpy 函数---字符串赋值函数
一般形式为
strcpy (
字符数组1 , 字符数组2 )
③ strcmp
函数---字符串比较函数
一般形式为
strcmp(字符数组1,字符数组2
)
④ srrlen
函数---测试字符串长度的函数
一般形式为
strlen(字符数组)
注意:函数的长度为字符串中的实际长度(不包括'\0'在内)。例如:
char str[10] = "China";
printf("%d",strlen(str));
输出结果是不是10,也不是 6,而是 5。
4.用数组名作函数实参时,不是把数组元素的值传递给形参,而是把实参数组的首元素的地址传递给形参数组,且两个数组共占同一段内存单元。 当形参数组中各元素的值发生变化会使实参数组元素的值同时发生变化。
5.外部变量与局部变量同名,分析结果。例:
#include<stdio.h>
int a = 3,b = 5;
int main()
{ int max(int a,int b);
int a = 8; // a是局部变量,作用于第5,6和7行,,,此范围内全局变量a
被局部变量a屏蔽,而全局变量b有效,所以最后结果是8
printf("max = %d\n",max(a,b));
return 0;
}
int max(int a,int b)
{ int c;
c = a > b ? a : b;
return(c);
}
运行结果: max = 8
6.①在定义变量时可以对它初始化,如:
int *p = &a[0];
它等效于下面两行:
int *p;
p = &a[0]; //不能写成*p = &a[0];
也可以写成
int *p = a ;
②用指针引用数组元素时,
a是数组名,p是指向该数组元素的指针变量,其初值 p = a
。*(p+i)与*(a+i)等价
③ 以变量名和数组名作为函数参数的比较:
实参类型
变量名 数组名
要求的形参类型 变量名 数组名或指针变量
传递的信息 变量的值
实参数组首元素的地址
通过函数调用能否改变实参的值 不能改变
能改变
④ *p++;
由于 ++ 和 * 同优先级,结合方向自右向左,因此它等价于*(p++)。先引用 p
的值,实现 *p 的运算,然后再使p自增 1
。
++(*p);
表示 p 指向的的元素的值加 1 的值。
*(++p);
若 p 初值为 a (即 &a[0]),若输出 *(p++) ,得到 a[0] 的值,而输出 *(++p)
得到 a[1] 的值。
⑤ int (*p)[4];
表示定义 p 为一个指针变量,它指向包含 4
个整形元素的一位数组。注意 *p 两侧的括号不能缺少。因为 [ ]
运算级别高。
7.
malloc 函数,calloc 函数,free
函数,relloc
函数,,,这4个函数的声明在 stdlib.h 头文件中。
8.以下是程序中的一部分:
srruct Student
{ int num;
char name[20];
float score;
}student1;
scanf("%d%s%f",&student1.num,student1.name,&student1.score);
注意在 scanf 函数中在成员 student1.num
和 student1.score 的前面都有地址符 &
,而在 student1.name 前面没有 & ,这是因为 name
是数组名,本身就代表地址,故不能画蛇添足地再加一个 & 。
9.结构体变量所占内存长度是个成员所占的内存长度之和;而共用体变量所占的内存长度等于最长的成员长度。
10.共用体变量中起作用的成员是最后一次被赋值的成员,在对共用体变量中的一个成员赋值后,原有变量存储单元中的值就被取代。
1.①优先级关系:!(非) >
算数运算符 > 关系运算符
> &&和||
> 赋值运算符
②条件运算符的优先级别比关系运算符 和 算数运算符 都低,例:
max = (a > b) ? a : b
括号可以不要,可写成
max = a > b ? a : b
如果有
a > b ? a : b + 1
相当于a > b ? a : (b + 1),而不相当于(a > b ? a : b) + 1。
2.C系统在用字符数组存储字符串常量是会自动加一个'\0'作为结束符。例如:
char c[ ] = "I am happy";
请注意,此时数组长度不是10
,而是11。
3.①
strcat 函数---字符串连接函数
一般形式为
strcat(
字符数组1 , 字符数组2 )
② strcpy
和 strncpy 函数---字符串赋值函数
一般形式为
strcpy (
字符数组1 , 字符数组2 )
③ strcmp
函数---字符串比较函数
一般形式为
strcmp(字符数组1,字符数组2
)
④ srrlen
函数---测试字符串长度的函数
一般形式为
strlen(字符数组)
注意:函数的长度为字符串中的实际长度(不包括'\0'在内)。例如:
char str[10] = "China";
printf("%d",strlen(str));
输出结果是不是10,也不是 6,而是 5。
4.用数组名作函数实参时,不是把数组元素的值传递给形参,而是把实参数组的首元素的地址传递给形参数组,且两个数组共占同一段内存单元。 当形参数组中各元素的值发生变化会使实参数组元素的值同时发生变化。
5.外部变量与局部变量同名,分析结果。例:
#include<stdio.h>
int a = 3,b = 5;
int main()
{ int max(int a,int b);
int a = 8; // a是局部变量,作用于第5,6和7行,,,此范围内全局变量a
被局部变量a屏蔽,而全局变量b有效,所以最后结果是8
printf("max = %d\n",max(a,b));
return 0;
}
int max(int a,int b)
{ int c;
c = a > b ? a : b;
return(c);
}
运行结果: max = 8
6.①在定义变量时可以对它初始化,如:
int *p = &a[0];
它等效于下面两行:
int *p;
p = &a[0]; //不能写成*p = &a[0];
也可以写成
int *p = a ;
②用指针引用数组元素时,
a是数组名,p是指向该数组元素的指针变量,其初值 p = a
。*(p+i)与*(a+i)等价
③ 以变量名和数组名作为函数参数的比较:
实参类型
变量名 数组名
要求的形参类型 变量名 数组名或指针变量
传递的信息 变量的值
实参数组首元素的地址
通过函数调用能否改变实参的值 不能改变
能改变
④ *p++;
由于 ++ 和 * 同优先级,结合方向自右向左,因此它等价于*(p++)。先引用 p
的值,实现 *p 的运算,然后再使p自增 1
。
++(*p);
表示 p 指向的的元素的值加 1 的值。
*(++p);
若 p 初值为 a (即 &a[0]),若输出 *(p++) ,得到 a[0] 的值,而输出 *(++p)
得到 a[1] 的值。
⑤ int (*p)[4];
表示定义 p 为一个指针变量,它指向包含 4
个整形元素的一位数组。注意 *p 两侧的括号不能缺少。因为 [ ]
运算级别高。
7.
malloc 函数,calloc 函数,free
函数,relloc
函数,,,这4个函数的声明在 stdlib.h 头文件中。
8.以下是程序中的一部分:
srruct Student
{ int num;
char name[20];
float score;
}student1;
scanf("%d%s%f",&student1.num,student1.name,&student1.score);
注意在 scanf 函数中在成员 student1.num
和 student1.score 的前面都有地址符 &
,而在 student1.name 前面没有 & ,这是因为 name
是数组名,本身就代表地址,故不能画蛇添足地再加一个 & 。
9.结构体变量所占内存长度是个成员所占的内存长度之和;而共用体变量所占的内存长度等于最长的成员长度。
10.共用体变量中起作用的成员是最后一次被赋值的成员,在对共用体变量中的一个成员赋值后,原有变量存储单元中的值就被取代。
相关文章推荐
- 初学PL/SQL的一些基本知识
- 【转】如果是初学C语言请看完 一些成功人士的心得转载的文章
- 如果是初学C语言请看完 一些成功人士的心得
- 关于C语言的一些零碎知识
- C语言的一些小技巧 小知识
- Web标准:关于web标准的一些初学的知识
- C语言的一些误用和知识总结
- 如果是初学C语言请看完 一些成功人士的心得
- C语言的一些误用和知识总结
- ios初学的一些小知识(大手勿喷)
- C语言中一些比较基础而又重要的知识
- C语言中的一些小知识汇集(不断更新)
- 如果是初学C语言请看完 一些成功人士的心得
- C语言中关于数组、指针以及函数的一些基本知识
- 如果是初学C语言请看完 一些成功人士的心得
- 如果是初学C语言请看完 一些成功人士的心得
- C语言中的一些小知识(《c语言入门经典》读书笔记)20120315
- C语言的数组、字符串等一些知识总结
- C语言的一些知识
- C语言的一些零碎知识