变量与常量,数据类型认知升维
C语言中各种变量的定义及数据类型的认知:
一般而言,在譬如C等高级编程语言中,我们定义不同的类型的变量,需要不同的数据类型来进行声明,不同类型的数据类型声明的变量占用的内存空间不一样;
而数据类型大致分为两种:
(1)内置的基本数据类型:数字类型,字符型,布尔型等
(2)自定义的数据类型: 如结构体类型,共用体类型,指针类型,枚举类型,数据类型等
变量定义语法规则:
(1)先声明,再赋值
数据类型 变量名称; // 声明变量
变量 = 变量的值; // 给变量赋值
C语言的语句以分号“;”语句的结束标识
(2)变量声明同时进行赋值
数据类型 变量名称 = 变量的值
(3)同时定义多个变量并赋值
数据类型 变量名1 = 变量值1, 变量名2 = 变量值2, 变量名3 = 变量值3, 变量名4 = 变量值4, .....
C语言定义常量使用关键字const
const 数据类型 常量名 = 常量值; // 注意:常量定义的同时必须赋值,否则编译器报错,默认的分号不能少;
C语言定义字符变量语法规则:
char 变量名 ;
变量名 = '变量值' ‘; // 必须单引号''把字符引起来
#include // 头文件
/*
C语言中各种变量的定义及数据类型的认知:
一般而言,在譬如C等高级编程语言中,我们定义不同的类型的变量,需要不同的数据类型来进行声明,不同类型的数据类型声明的变量占用的内存空间不一样;
而数据类型大致分为两种:
(1)内置的基本数据类型:数字类型,字符型,布尔型
(2)自定义的数据: 如结构体类型,共用体类型,指针类型,枚举类型,数据类型等
*/
void main() { // 程序执行入口,main函数可以有参数;
printf("C语言定义变量语法规则");
/*
变量定义语法规则:
(1)先声明,再赋值
数据类型 变量名称; // 声明变量
变量 = 变量的值; // 给变量赋值
C语言的语句以分号“;”语句的结束标识
(2)变量声明同时进行赋值
数据类型 变量名称 = 变量的值
(3)同时定义多个变量并赋值
数据类型 变量名1 = 变量值1, 变量名2 = 变量值2, 变量名3 = 变量值3, 变量名4 = 变量值4, .....
*/
// 定义数字类型的变量
short sh = 200; // 定义短整形的数据类型变量
long lo = 5565464; // 定义长整形的数据类型变量
int in = 300000; // 定义短整形数据
printf("输出不同的数量类型: \n");
printf("短整形是: %hd\n", sh);
printf("整形是: %d\n", in);
printf("输出长整形:%ld\n",lo);
printf("===============================================\n");
printf(" 学无止境,C位出道\n");
printf("===============================================\n");
printf("C语言定义常量:\n");
/*
C语言定义常量使用关键字const
const 数据类型 常量名 = 常量值; // 注意:常量定义的同时必须赋值,否则编译器报错,默认的分号不能少;
*/
const float NUM = 3.1415926;
printf("常量Num = %f", NUM);
printf("\n");
printf("");
printf("");
printf("字符定义规则:");
/*
C语言定义字符变量语法规则:
char 变量名
变量名 = '变量值' // 必须单引号''把字符引起来
*/
char t = 'A';
printf("字符t = %c", t);
printf("");
}
运行效果:
C语言定义变量语法规则输出不同的数量类型:
短整形是: 200
整形是: 300000
输出长整形:5565464
===============================================
学无止境,C位出道
===============================================
C语言定义常量:
常量Num = 3.141593
字符定义规则:字符t = A
D:\program_file\c_workspace\ProjectCodeChapter\x64\Debug\ProjectCodeChapter.exe (进程 17968)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
通常定义字符串常量使用#define,它被称为"宏定义"。根据宏定义中是否有参数,
可以将宏定义分为:
(1)不带参数的宏定义
(2)带参数的宏定义
========================================================================
(1.1)不带参数的宏定义,如下形式:
#define 宏名 字符序列
#: 表示这是一条预处理命令
宏名: 是一个标识符,必须符合C语言标识符的规定
字符序列: 可以是常量,表达式,格式字符串等 例如: #define PI 3.14159 ,该语句的作用是用PI替代
3.14159,在编译处理时,每当在源程序中遇到PI就自动用3.14159代替
(1.2)宏定义不是C语句,不需要在行末加分号,宏定义后,即可成为其他宏定义中的一部分。
(1.3)不带参数的宏,在字符串中含有宏名,则不能被替换
(1.4)#define 命令出现在程序中函数的外面,宏名的有效范围为定义命令之后到此源文件结束
(1.5)可以用#undef命令终止宏定义的作用域
#include
/*
通常定义字符串常量使用#define,它被称为"宏定义"。根据宏定义中是否有参数,
可以将宏定义分为:
(1)不带参数的宏定义
(2)带参数的宏定义
========================================================================
(1.1)不带参数的宏定义,如下形式:
#define 宏名 字符序列
#: 表示这是一条预处理命令
宏名: 是一个标识符,必须符合C语言标识符的规定
字符序列: 可以是常量,表达式,格式字符串等 例如: #define PI 3.14159 ,该语句的作用是用PI替代
3.14159,在编译处理时,每当在源程序中遇到PI就自动用3.14159代替
(1.2)宏定义不是C语句,不需要在行末加分号,宏定义后,即可成为其他宏定义中的一部分。
(1.3)不带参数的宏,在字符串中含有宏名,则不能被替换
(1.4)#define 命令出现在程序中函数的外面,宏名的有效范围为定义命令之后到此源文件结束
(1.5)可以用#undef命令终止宏定义的作用域
(3)宏定义用于预处理命令,它不同于定义的变量,只作字符替换,不分配内存空间
(3.1)带参数的宏定义。带参数的宏定义不只是简单的字符串替换,还要进行参数的替换。其一般形式如下:
#define 宏名(参数列表) 字符序列
*/
#define SIDE 5 // 定义宏 正方形的边
#define PERIMETER 4*SIDE // 定义正方形的周长宏
#define AREA SIDE*SIDE // 定义面积宏
#define STANDARD "Come on baby,jion us.\n" // 定义字符串宏
#define TEST "Come on baby,jion us."
#define MIN(x,y)(x
运行效果:
输出宏字符串:
Come on baby,jion us.
正方形的边长: 5
正方形的周长: 20
正方形的面积: 25
字符串中含有宏名时,该宏将不会被替换
This TEST is not that TEST
==================================
使用#undef终止宏的作用域
Come on baby,jion us.
=======================================
x,y为:
15,9
the min number is:9D:\program_file\c_workspace\ProjectCodeChapter01\x64\Debug\ProjectCodeChapter01.exe (进程 16996)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
(1)类型转换
1.1隐式类型转换 ---自动类型转换
在C语言中,如果把比较短的数据类型变量的值赋值给比较长的数据类型变量,那么比较短的数据类型变量中的值会升级为
比较长的数据类型,数据信息不会丢失。这类转换称为自动类型转换;
这种转换类似于,小杯子的水往大杯导入不会发生水溢出;
1.2显示类型转换 ---强制类型转换
强制类型转换是将比较长的数据类型变量的值赋值给比较短的数据类型变量,转换的过程如:大杯水往小杯导入,必会有水溢出,
也就是数据会丢失
强制类型转换一般形式:
(类型名) (表达式)
int secret1=103;
char answer1=(char)secret1; // 进行强制类型转换
(2)格式化字符输出|输入函数
2.1 使用printf(格式控制,输出列表)
#include // 引入头文件
/*
(1)类型转换
1.1隐式类型转换 ---自动类型转换
在C语言中,如果把比较短的数据类型变量的值赋值给比较长的数据类型变量,那么比较短的数据类型变量中的值会升级为
比较长的数据类型,数据信息不会丢失。这类转换称为自动类型转换;
这种转换类似于,小杯子的水往大杯导入不会发生水溢出;
1.2显示类型转换 ---强制类型转换
强制类型转换是将比较长的数据类型变量的值赋值给比较短的数据类型变量,转换的过程如:大杯水往小杯导入,必会有水溢出,
也就是数据会丢失
强制类型转换一般形式:
(类型名) (表达式)
int secret1=103;
char answer1=(char)secret1; // 进行强制类型转换
(2)格式化字符输出|输入函数
2.1 使用printf(格式控制,输出列表)
*/
void main() { // 主函数
double foot = 37.5f; // 定义双精度变量,用来标识脚的大小
int size = (int)foot + 1; // 强制类型转换,表示鞋码的大小
printf("您的脚是%.1f码的尺寸\n", foot);// 输出脚的大小
printf("您应该买%d码的鞋子\n", size); // 输出鞋码的大小
}
运行效果:
您的脚是37.5码的尺寸
您应该买38码的鞋子D:\program_file\c_workspace\ProjectCodeChapter02\x64\Debug\ProjectCodeChapter02.exe (进程 8424)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
C语言中位运算:
(1)位是计算机存储数据的最小单位,一个二进制位可以表示为两种状态(0和1),多个二进制组合起来便可表示多种信息;
(2)一个字节(byte)通常由8位二级制数组成,当然有的计算机系统是由16位二级制组成;
为运算符包括:
"与"运算符
"或"运算符
"取反"运算符: "~"取反运算符是单目运算符,具有右结合性。其功能是对参与运算数的二进制位求反;
即原来的0变为1,1变为0;
"异或"运算符: "异或"运算符"^"是双目运算符,其功能是使参与运算的两数个对应的二进制相"异或",
当对应的两个二级制相异时结果为1,否则结果为0;
"左移"运算符
"右移"运算符
循环移位
#define _CRT_SECURE_NO_WARNINGS // 取消Visual Studio 的安全警告,导致程序运行报错
#include
/*
C语言中位运算:
(1)位是计算机存储数据的最小单位,一个二进制位可以表示为两种状态(0和1),多个二进制组合起来便可表示多种信息;
(2)一个字节(byte)通常由8位二级制数组成,当然有的计算机系统是由16位二级制组成;
为运算符包括:
"与"运算符
"或"运算符
"取反"运算符: "~"取反运算符是单目运算符,具有右结合性。其功能是对参与运算数的二进制位求反;
即原来的0变为1,1变为0;
"异或"运算符: "异或"运算符"^"是双目运算符,其功能是使参与运算的两数个对应的二进制相"异或",
当对应的两个二级制相异时结果为1,否则结果为0;
"左移"运算符
"右移"运算符
循环移位
*/
// 自定义一个左移函数: 首先从键盘中输入一个八进制数,然后输入要移位的位数,最后将移位的结果显示在屏幕上;
int left(unsigned value, int n) { // 自定义一个左移函数
unsigned z;
z = (value >> (32 - n)) | (value << n);
return z;
}
void main() {
printf("=================================================\n");
unsigned result; // 定义无符号变量
int age1, age2; // 定义变量
printf("please input age1:");
scanf("%d", &age1); // 输入年龄1
printf("please input age2:");
scanf("%d", &age2); // 输入年龄2
printf("age1=%d,age2=%d", age1, age2); // 显示年龄
printf("===========================与运算====================\n");
result = age1 & age2; // 位运算符,与操作
printf("\n age1 & age2=%u\n", result);
printf("===========================或运算====================\n");
int a = 0xFFCA, resultA; // 定义变量
resultA = a | a; // 或运算
printf("a|a=%X\n", resultA); // 计算结果
printf("===========================取反运算====================\n");
unsigned resultB; // 定义无符号的变量
int b; // 定义变量b
printf("提示输入一个数");
scanf("%d", &b);// 输入一个数
printf("b=%d", b);// 显示输入的数据
resultB = ~b; // 对b求反
printf("\n~b=%o\n", resultB); // 显示结果
printf("===========================异或运算====================\n");
unsigned resultCD;
int c, d; // 定义两个参与异或运算的变量
printf("please input c:");// 显示输入c
scanf("%d", &c);
printf("please input d:"); // 显示输入d
scanf("%d", &d);
printf("c=%d,d=%d", c, d);// 显示数据c,d
resultCD = c ^ d; // 求c与d的异或结果
printf("\nc^d=%u\n", resultCD); // 输出结果
printf("异或运算符经常用于一些比较简单的加密算法中:");
printf("===========================左移运算符====================\n");
int f = 15; // 定义变量
f = f << 2; // 左移两位
printf("the result is: %d\n", f);
f = f << 3; // f左移三位
printf("the result is: %d \n", f); // 显示结果
printf("===========================右移运算符====================\n");
int j = 30, k = -30;// 定义变量
j = j >> 3; // j右移动三位
k = k >> 3; // k右移三位
printf("the result is :%d,%d\n", j, k); // 显示接口
j = j >> 2; // j右移两位
k = k >> 2; // k右移两位
printf("the result is :%d,%d\n", j, k); // 显示结果
printf("===========================循环移位====================\n");
unsigned m; // 定义无符号整形
int t; // 定义变量
printf("please input a number:\n");
scanf("%o", &m); // 输入一个八进制数据
printf("please input the number of displacement (>0 :\n)");
scanf("%d", &t); // 输入需要移位的位数
printf("the result is %o\n", left(m, t)); // 将左移后的结果输出
}
运行效果:
=================================================
please input age1:45
please input age2:45
age1=45,age2=45===========================与运算====================age1 & age2=45
===========================或运算====================
a|a=FFCA
===========================取反运算====================
提示输入一个数45
b=45
~b=37777777722
===========================异或运算====================
please input c:45
please input d:45
c=45,d=45
c^d=0
异或运算符经常用于一些比较简单的加密算法中:===========================左移运算符====================
the result is: 60
the result is: 480
===========================右移运算符====================
the result is :3,-4
the result is :0,-1
===========================循环移位====================
please input a number:
24
please input the number of displacement (>0 :
)2
the result is 120D:\program_file\c_workspace\ProjectChapter03\x64\Debug\ProjectChapter03.exe (进程 5060)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
C条件判断与条件操作符
(1)C语言中条件判断一般形式如下:
if(条件表达式) 语句;
if(条件表达式){语句块;}
(2)if(条件表达式)...else 语句,其一般形式如下
if(条件表达式)
语句块1;
else
语句块2;
(3)else if 嵌套语句;其一般形式如下
if(表达式1) 语句块1
else if(表达式2) 语句块2
else if(表达式3) 语句块3
else if(表达式4) 语句块4
.......
else if(表达式m) 语句块m
else 语句块n
(4) 条件运算符
自增,自减运算符都是C语言提供的精简运算符,那么条件选择也提供了一个精简的运算符------
条件运算符(又称三目运算符)。条件运算符是将3个表达式连接在一起组成的条件表达式。
条件运算符的语法格式如下:
返回值= 条件表达式1 ?表达式2:表达式3;
(5) swith语句
swith语句是多分支选择语句,它的一般形式如下。
swith(表达式) {
case 值1:
语句块1;
case 值2:
语句块2;
case 值3:
语句块3;
............
case 值n:
语句块n;
defualt:
不符合语句块;
}
#define _CRT_SECURE_NO_WARNINGS
#include
/*
C条件判断与条件操作符
(1)C语言中条件判断一般形式如下:
if(条件表达式) 语句;
if(条件表达式){语句块;}
(2)if(条件表达式)...else 语句,其一般形式如下
if(条件表达式)
语句块1;
else
语句块2;
(3)else if 嵌套语句;其一般形式如下
if(表达式1) 语句块1
else if(表达式2) 语句块2
else if(表达式3) 语句块3
else if(表达式4) 语句块4
.......
else if(表达式m) 语句块m
else 语句块n
(4) 条件运算符
自增,自减运算符都是C语言提供的精简运算符,那么条件选择也提供了一个精简的运算符------
条件运算符(又称三目运算符)。条件运算符是将3个表达式连接在一起组成的条件表达式。
条件运算符的语法格式如下:
返回值= 条件表达式1 ?表达式2:表达式3;
(5) swith语句
swith语句是多分支选择语句,它的一般形式如下。
swith(表达式) {
case 值1:
语句块1;
case 值2:
语句块2;
case 值3:
语句块3;
............
case 值n:
语句块n;
defualt:
不符合语句块;
}
*/
int main() {
int iDay; // 定义变量表示输入的星期几
// 定义变量代表一周中的每一天
int Monday = 1, Tuesday = 2, Wednesday = 3, Thursday = 4,
Friday = 5, Saturday = 6, Sunday = 7;
printf("请选择星期几:\n"); // 提示信息
scanf("%d", &iDay); // 输入星期
if (iDay > Friday) {
if (iDay > Saturday) {
printf("和朋友去逛街\n");
}
else {
printf("在家陪家人\n");
}
}
else {
if (iDay == Monday) {
printf(" 开会\n");
}
else {
printf(" 工作\n");
}
}
printf("=======================条件运算符实例==========================\n");
int food, fee; // 定义存储餐费与总费用的两个变量
printf("您的订餐费用是:\n"); // 提示信息
scanf("%d", &food); // 输入餐费
fee = food >= 15 ? food : (food + 5);// 利用三目运算符计算总费用
printf("您的订单共计%d元,请支付\n", fee); // 输出总共费用
printf("=======================switch语句多路选择=========================\n");
printf("请查看口袋剩多少元钱?\n");
int money;
scanf("%d", &money);
switch (money)
{
case 7:
printf("还剩%d元,吃米饭套餐\n", money);
// 没有break语言,符合该条件执行该语句后,后面的都会被执行
case 8:
printf("还剩%d元,吃米线\n",money);
// 没有break语言
case 9:
printf("还剩%d元,吃披萨\n", money);
// 没有break语言
default:
printf(" 没钱了,你可以吃了!!!\n");
}
printf("=======================多路开关模式的switch语句=========================\n");
int mouth; // 定义表示月份的变量
printf("请输入月份:\n");
scanf("%d", &mouth); // 输入月份
switch (mouth) {
// 多路开关模式,如果输入的月份是1,3,5,7,8,10,12
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
printf("%d个月有31天\n", mouth); // 则输出一共有31天
break;
// 多路开关模式,如果输入的月份是4,6,9,11
case 4:
case 6:
case 9:
case 11:
printf("%d个月有30天\n", mouth); // 则输出一共有30天
break;
case 2:
printf("%d个月有28天\n", mouth); // 则输出一共有28天
break;
default:
printf("输入错啦,没有这个月份\n", mouth); //
}
return 0;
}
运行效果:
请选择星期几:
6
在家陪家人
=======================条件运算符实例==========================
您的订餐费用是:
250
您的订单共计250元,请支付
=======================switch语句多路选择=========================
请查看口袋剩多少元钱?
7
还剩7元,吃米饭套餐
还剩7元,吃米线
还剩7元,吃披萨
没钱了,你可以吃了!!!
=======================多路开关模式的switch语句=========================
请输入月份:
8
8个月有31天D:\program_file\c_workspace\ProjectCodeChapter04\x64\Debug\ProjectCodeChapter04.exe (进程 12696)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
C语言中循环|循环控制
(1)C语言中循环通常有三种形式,与Java及C++一样,而相对于Go语言中只有for这种循环方式,没有while及do {} while(表达式);
Python中有for以及while(表达式){},无do{} while(表达式)这种方式;
我们知道计算机最擅长干重复的事,而这些重复的事抽象为循环指令来与计算机交互完成特定的业务逻辑;
(2)转移语句包括:
break语句
continue语句
goto语句
#include
/*
C语言中循环|循环控制
(1)C语言中循环通常有三种形式,与Java及C++一样,而相对于Go语言中只有for这种循环方式,没有while及do {} while(表达式);
Python中有for以及while(表达式){},无do{} while(表达式)这种方式;
我们知道计算机最擅长干重复的事,而这些重复的事抽象为循环指令来与计算机交互完成特定的业务逻辑;
(2)转移语句包括:
break语句
continue语句
goto语句
*/
int main() {
printf("=======================do{语句块}while(表达式);循环=============================\n");
long number = 1; // 起始数字是1
long sum = 0; // 起始时,和为0;
do {
sum = sum + number; // 从1开始求和
number++; // 等价于: number =number +1
} while (number <= 20000); // 如果number的值超过20万,do....while语句被终止
printf("1~20万的和等于%d\n", sum);
printf("=======================while(表达式){语句块}循环=================================\n");
while (number <= 30000) {
sum = sum + number;
number++;
}
printf("1~3万的和等于%d\n", sum);
printf("========================for(;;){语句块}循环=======================================\n");
for (number = 1; number <= 700000; number++) {
sum = sum + number;
}
printf("1~70万的和等于%d\n", sum);
printf("========================for循环逗号的引用=======================================\n");
int iSum, iCount;
for (iSum = 0, iCount = 1; iCount < 100000; iCount++) {
iSum = iSum + iCount;
}
printf("1~100的和等于%d\n", iSum);
printf("=========================for循环嵌套============================================\n");
int i, j, k; // 定义变量i,j,k为基本整形
for (i = 1; i <= 5; i++) {
for (j = 1; j <= 5 - i; j++) // 空格数据
printf(" ");
for (k = 1; k <= 2 * i - 1; k++) // 显示"*"的数据
printf("*");
printf("\n");
}
printf("=========================C语言转移语句============================================\n");
while (1) {
printf("break \n");
break;
}
printf("=========================do{}while(表达式);至少执行一次;语言转移语句================\n");
do {
printf("break\n");
break;
} while (1);
printf("==========================break跳转语句================================\n");
int iCountNum;
for (iCountNum = 0; iCountNum <= 10; iCountNum++) {
if (iCountNum == 5) {
printf("%d\n", iCountNum);
break;
}
printf("数字%d\n", iCountNum);
}
printf("==========================coutinue语句=================================\n");
for (iCountNum = 0; iCountNum <= 10; iCountNum++) {
if (iCountNum == 5) {
printf("%d\n", iCountNum);
continue; // 跳出本次循环
}
printf("数字%d\n", iCountNum);
}
printf("==========================goto跳转语句=================================\n");
for (iCountNum = 0; iCountNum <= 10; iCountNum++) {
if (iCountNum == 5) {
printf("%d\n", iCountNum);
goto alphabet; // 跳转到alphabet语句出开始执行;
}
printf("数字%d\n", iCountNum);
}
alphabet:
printf("字母啊a\n");
return 0;
}
=======================do{语句块}while(表达式);循环=============================
1~20万的和等于200010000
=======================while(表达式){语句块}循环=================================
1~3万的和等于450015000
========================for(;;){语句块}循环=======================================
1~70万的和等于637229128
========================for循环逗号的引用=======================================
1~100的和等于704982704
=========================for循环嵌套============================================
*
***
*****
*******
*********
=========================C语言转移语句============================================
break
=========================do{}while(表达式);至少执行一次;语言转移语句================
break
==========================break跳转语句================================
数字0
数字1
数字2
数字3
数字4
5
==========================coutinue语句=================================
数字0
数字1
数字2
数字3
数字4
5
数字6
数字7
数字8
数字9
数字10
==========================goto跳转语句=================================
数字0
数字1
数字2
数字3
数字4
5
字母啊aD:\program_file\c_workspace\ProjectCodeChapter05\x64\Debug\ProjectCodeChapter05.exe (进程 16720)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
C语言标准函数库专门为字符串提供了一系列处理函数
(1)字符串复制strcpy(目标字符数组名,源字符数组名);该函数功能: 把源字符数组中的字符串复制到目标字符数组中,
字符串结束标志"\0"也一同复制
(2)字符串连接stracat(目的字符数组名,源字符数组名);该函数功能: 把源字符数组中的字符串连接到目的字符数组中字符串的后面;
并删去目的的字符数组中原有的结束符"\0"。
#define _CRT_SECURE_NO_WARNINGS
#include
#include
/*
C语言标准函数库专门为字符串提供了一系列处理函数
(1)字符串复制strcpy(目标字符数组名,源字符数组名);该函数功能: 把源字符数组中的字符串复制到目标字符数组中,
字符串结束标志"\0"也一同复制
(2)字符串连接stracat(目的字符数组名,源字符数组名);该函数功能: 把源字符数组中的字符串连接到目的字符数组中字符串的后面;
并删去目的的字符数组中原有的结束符"\0"。
*/
int main() {
printf("=======================strcpy()复制函数==========================");
char oldStr[30] = "包子一元一个", newStr[30] = "包子五元三个";
printf("原来的招牌的内容是:\n");
printf("%s\n", oldStr);
strcpy(oldStr, newStr); // 利用strcpy()函数将招牌内容复制到旧招牌上
printf("经过处理后招牌的内容是:\n");
printf("%s\n", oldStr);
printf("=======================strcat()连接函数==========================");
// 定义字符数组保存课程名称
char course1[30] = " 物理", course2[30] = " 数学";
char course3[30] = " 英语", course4[30] = " 语文";
// 定义字符数组保存上课时间
char time1[30] = "8:00-9:40", time2[30] = "10:00-11:40";
char time3[30] = "13:00-14:40", time4[30] = "15:00-16:40";
// 分别调用strcat()函数将课程与时间连接起来
strcat(time1, course1);
strcat(time2, course2);
strcat(time3, course3);
strcat(time4, course4);
printf("今天的课程如下:\n");
puts(time1);
puts(time2);
puts(time3);
puts(time4);
return 0;
}
=======================strcpy()复制函数==========================原来的招牌的内容是:
包子一元一个
经过处理后招牌的内容是:
包子五元三个
=======================strcat()连接函数==========================今天的课程如下:
8:00-9:40 物理
10:00-11:40 数学
13:00-14:40 英语
15:00-16:40 语文D:\program_file\c_workspace\ProjectCodeString\x64\Debug\ProjectCodeString.exe (进程 10032)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
C语言指针认知升维:
(1)用好指针是学好C语言的核心和精髓所在,一方面,可以提高程序的编译效率和执行速度以及实现动态的存储分配;
另一方面,使用指针可使程序更灵活,以便于表示各种数据结构,编写高质量的程序;
(2)指针是C语言的"灵魂",是C语言最重要的数据类型,它也是C语言与其他语言的重要区别,C语言的各个类型的变量,数组,函数都与指针有很大关系;
(3)指针与地址
在计算机内,通常用一个字节(1byte)来表示一内存地址,为管理的方便,给每个内存单元编号,这个编号就是内存单元的地址;也就是说每一个内存单元
都有一个唯一的编号与之对应,同样,每一个内存单元都对应一个唯一的用该编号来指向的地址;
(4)如果在程序中定义一个变量,那么在编译时系统会为这个变量分配一定数量的内存单元。在系统中,一个字符型变量分配
1个字节的内存单元,整形变量分配4个字节的内存单元,浮点型变量分配4个字节的内存单元;
(5)读取内存单元的数据
在C语言中,读取数据有两种方式:
(5.1)直接访问内存单元
(5.2)间接访问内存单元
(6)定义指针变量的一般形式
数据类型 *变量名1,*变量名2,*变量名3,...,*变量名n;
指针变量的几点说明:
"*"是指针变量的标识符,它不能被省略。"*"只起到修饰作用,不是变量名本身的组成部分;
变量名可以是任意C语言合法的标识符
数据类型是指针变量中所存放的变量地址的类型
(7)指针变量赋值
指针变量同普通变量一样,使用之前不仅需要定义,而且必须赋予具体的值,未经赋值的指针变量不能使用;
给指针变量赋的值只能是地址,而不能是任何其他的数据,否则将会引起错误,C语言中提供了地址运算符"&"来
表示变量的地址。取变量地址的一般地址为:
& 变量名;
#define _CRT_SECURE_NO_WARNINGS
#include
/*
C语言指针认知升维:
(1)用好指针是学好C语言的核心和精髓所在,一方面,可以提高程序的编译效率和执行速度以及实现动态的存储分配;
另一方面,使用指针可使程序更灵活,以便于表示各种数据结构,编写高质量的程序;
(2)指针是C语言的"灵魂",是C语言最重要的数据类型,它也是C语言与其他语言的重要区别,C语言的各个类型的变量,数组,函数都与指针有很大关系;
(3)指针与地址
在计算机内,通常用一个字节(1byte)来表示一内存地址,为管理的方便,给每个内存单元编号,这个编号就是内存单元的地址;也就是说每一个内存单元
都有一个唯一的编号与之对应,同样,每一个内存单元都对应一个唯一的用该编号来指向的地址;
(4)如果在程序中定义一个变量,那么在编译时系统会为这个变量分配一定数量的内存单元。在系统中,一个字符型变量分配
1个字节的内存单元,整形变量分配4个字节的内存单元,浮点型变量分配4个字节的内存单元;
(5)读取内存单元的数据
在C语言中,读取数据有两种方式:
(5.1)直接访问内存单元
(5.2)间接访问内存单元
(6)定义指针变量的一般形式
数据类型 *变量名1,*变量名2,*变量名3,...,*变量名n;
指针变量的几点说明:
"*"是指针变量的标识符,它不能被省略。"*"只起到修饰作用,不是变量名本身的组成部分;
变量名可以是任意C语言合法的标识符
数据类型是指针变量中所存放的变量地址的类型
(7)指针变量赋值
指针变量同普通变量一样,使用之前不仅需要定义,而且必须赋予具体的值,未经赋值的指针变量不能使用;
给指针变量赋的值只能是地址,而不能是任何其他的数据,否则将会引起错误,C语言中提供了地址运算符"&"来
表示变量的地址。取变量地址的一般地址为:
& 变量名;
*/
// 交换两个数据
void swap(int* a, int* b) {
int t = *a;
*a = *b;
*b = t;
}
int main() {
int a; // 定义整形变量
int* ipointer1; // 定义整形指针变量
printf("请输入数据: \n");
scanf("%d", &a); // 输入数
ipointer1 = &a; // 将地址赋给指针变量
printf("转化十六进制为: %x\n", *ipointer1); // 以十六进制输出
printf("============利用指针交换两个数互换==================\n");
int x = 1, y = 9;
swap(&x, &y); // 调用函数交换值
printf("交换数据是: x = %d\n", x, y); // 输出交换后的值
return 0;
}
请输入数据:
2121
转化十六进制为: 849
============利用指针交换两个数互换==================
交换数据是: x = 9D:\program_file\c_workspace\ProjectCodePointer\x64\Debug\ProjectCodePointer.exe (进程 1652)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .