【摘要】 C语言中一些易混淆忽视的知识点
一、使用 VS2013 作为编译环境时需要注意的几点问题
在 VS2013 中使用 scanf 输出函数时,编译会报错,提示我们使用scanf_s等相应的函数,虽然这种方法更有利于程序的安全,但很多时候很不方便,不利于代码的移植。 我们可以采取更好的方法: 1)添加预处理#pragma warning(disable:4996)忽视…
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:
#include<windows.h>
#include<stdio.h>
#pragma warning(disable:4996)
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;
}
二、字符与字符串
-
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个字节;
文章来源: blog.csdn.net,作者:Dooo_yh,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/Sober_harmonic/article/details/116809898