文章预览
C语言中一些易混淆忽视的知识点
一、使用 VS2013 作为编译环境时需要注意的几点问题
在 VS2013 中使用 scanf 输出函数时,编译会报错,提示我们使用scanf_s等相应的函数,虽然这种方法更有利于程序的安全,但很多时候很不方便,不利于代码的移植。
我们可以采取更好的方法:
1)添加预处理
#pragma warning(disable:4996)
忽视该警告
2)添加预处理
#define _CRT_SECURE_NO_WARNINGS
一般情况使用 VS2013 编译运行C语言代码时,可执行窗口会闪退从而看不见结果,如果不想让其消失,需程序中添加:
system("pause");
system()就是调用(DOS)系统命令(和shell命令);
pause ,即DOS命令集合中的暂停命令;
注意:使用该语句需调用头文件
#include<windows.h>
//Eg1:
int main( )
{
int a = 0;
printf( "请输入执行操作:1、hello world 2、exit\n" ) ;
scanf( "%d" , & a) ;
if ( a == 1)
printf( "hello world!\n" ) ;
else
exit ;
system( "pause" ) ;
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
二、字符与字符串
C语言的字符数据类型(char)占一个字节,其本质是整型;
C语言存在字符串,但没有字符串类型!
即不能直接定义字符串变量:
string str = ''abcd'';//错误!
C语言间接定义字符串:通过数组
char str[] = ''abcd'';
或
char *str = ''abcd'';
指针保存;
字符串的大小(带’\0’)与长度(不带’\0’)是两个不同的概念;
通过 sizeof(按位求长度操作符)可以求出字符串大小:
sizeof(str);
通过 strlen 函数(该函数识别到’\0’停止计数)可以求出字符串长度;
所以从终端输入或从终端显示的内容都是字符;即当需要输入数字1234时,用户从键盘输入的是字符 1 2 3 4,通过 scanf 函数格式转换,printf 亦然。
三、函数、数组、关键字、操作符
C语言的函数默认返回值是整型(int);
临时变量不初始化默认值为随机值;
数组可以整体被初始化,但是不能被整体赋值;
define 宏替换,利于代码的可维护(注:define 不是关键字,它是编译器的预处理实现)
#define MAX 100
用MAX替换100
#define ADD(x,y) ((x)+(y))
用ADD(2,3)替换2+3(替换过程不进行计算)
关键字:const 使变量不能直接被修改;
关键字:extern 用来对变量或函数的声明 (声明可以多次)
extern int g_val;
声明变量
extern void test();
声明函数
关键字:static
修饰局部变量:使该变量生命周期变为全局,但作用域不变;
修饰全局变量:使全局变量只能在本文件使用,不影响生命周期;
修饰函数:使该函数只在本文件有效;
操作符 sizeof :按位求长度操作符;
三目操作符 :exp1 ? exp2 : exp3;
四、指针
定义一个指针本质是定义一个指针变量,用来存放地址;
C语言指针的存在提高了数据查找效率;
//整型
int a = 10; //整型变量放整型
a = 20; //变量在左,左值使用变量的空间属性
int b = a; //变量在右,右值使用变量的内容属性
//类比指针
int *p = &a;//指针变量放指针
p = &b; //左值使用变量的空间属性
int *q = p; //右值使用变量的内容属性
指针的解引用(*p)代表指针所指向的目标;
指针变量的大小与指向的内容等等无关,
在32位系统中指针大小位4个字节,
在64位系统中指针大小位8个字节;
………………………………