变量的作用域
C 语言中有三个地方可以声明变量:
- 在函数或块内部的局部变量
- 在所有函数外部的全局变量
- 在形式参数的函数参数定义中
全局变量:{}外部
局部变量:{}内部
在程序中,局部变量和全局变量的名称可以相同,但是在函数内,如果两个名字相同,会使用局部变量值,全局变量不会被使用,即全局变量的优先度低于局部变量
reference: C 作用域规则 | 菜鸟教程
a 可以打印出来,b就不行,会报错
同一个项目中,不同的源文件(.cpp)之间的变量要想相互使用,在未定义的.cpp文件中需要用关键字 extern 申明,未申明不可以使用
常量
const 修饰的常变量,本质上还是变量,但不可以赋新值
const int a = 10;
#define定义的标识符常量
#define TIMES 1000
枚举常量 - 可以一一列举的常量
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//extern int b;
enum gender
{
//枚举类型的变量的所有可能取值
//枚举常量
MALE, //0(默认),可以赋初值,eg:MALE = 3,后续以此类推
FEMALE, //1
SECRET //2
};
const int a = 10;
int main()
{
/***** 枚举常量 *****/
enum gender p1 = MALE;
enum gender p2 = FEMALE;
enum gender p3 = SECRET;
printf("%d\n", p1);
printf("%d\n", p2);
printf("%d\n", p3);
return 0;
}
字符串
字符串是一维字符数组,它的结束标志是一个\0的转义字符(结束标志,不算做字符串内容)
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
/***** 字符串 *****/
char site1[] = { 'H', 'E', 'L', 'L', 'O', '\0' }; //单个字符单引号
char site2[] = "HELLO"; //字符串双引号
printf("字符串1: %s\n", site1);
printf("字符串2: %s\n", site2);
return 0;
}
两种表示方法效果相同:
在Visual Studio中会自动在字符串末尾加入\0
如果没有这个'\0',会print出来一些奇奇怪怪的东西,这是因为字符串没有结束符
字符串的长度
使用strlen来计算,不过得先包含申明该函数的头文件#include<string.h>
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<string.h>
int main()
{
/***** 字符串 *****/
char site1[] = { 'H', 'E', 'L', 'L', 'O' }; //单个字符单引号
char site2[] = { 'H', 'E', 'L', 'L', 'O', '\0'};
char site3[] = "HELLO";
/* 字符串的长度 */
int len1 = strlen(site1);
int len2 = strlen(site2);
int len3 = strlen(site3);
int len4 = strlen("abcd");
printf("%d\n", len1);
printf("%d\n", len2);
printf("%d\n", len3);
printf("%d\n", len4);
return 0;
}