目录
数据类型:
(个性解释) 数据+类型
==》“数据”这个词在是数据结构中有明确解释 广义上是对事物的表示和表达.
类如 苹果3块斤 西瓜1.5块一斤 这里的3和1.5就是数据 而苹果和西瓜的共性就是水果,水果就是他们的类型(共性是水果) 那么这里的数据类型 就是某种水果的价格喽;
回归课本定义:数据类型在数据结构中的定义是一组性质相同的值的集合以及定义在这个值集合上的一组操作的总称。这样对照苹果和西瓜就能理解了
常见的数据类型如下:
char //字符数据类型
short //短整型
int //整形
long //长整型
long long //更长的整形
float //单精度浮点数
double //双精度浮点数
使用数据类型:
char ah = 'c';
int weight = 10;
int high= 20000;
测出每个类型的字节数,如下:(sizeof 为测数据所占用字节数的操作符,它并不是函数)
#include <stdio.h>
int main()
{
printf("%d\n", sizeof(char));
printf("%d\n", sizeof(short));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(long));
printf("%d\n", sizeof(long long));
printf("%d\n", sizeof(float));
printf("%d\n", sizeof(double));
printf("%d\n", sizeof(long double));
return 0;
}
那么提出疑问 >> C语言有没有字符串类型?
答案:没有的 因为C语言中字符串是不定的;而数据类型是C语言固有的(使用者不能添加C语言外的数据类型) 使用方式为 数据类型+变量名,如常见的int a=0 //定义整形变量 切初始值为0,也可以不用初始化;
字符串:
字符串的解释:
就是很简单的由字母组成的字符或串;C语言存储字母都是按照字符串的方式;
c语言中没有字符串类型 通过字符数组来模拟字符串
such as:
char ch[10]={'a','b','c'};//有初始的指定长度;
char ch[10]="abc";//有初始的指定长度;
char ch[]={'a','b','c'};//无初始的指定长度;
char ch[]="abc";//无初始的指定长度;
实例:
下来我们测测他们所占的字节数:(用sizeof所占字节关键字,strlen所占字长关键字)
#include <stdio.h>
int main()
{
char ch[10] = { 'a','b','c' };//有初始的指定长度;
char dh[10] = "abc";//有初始的指定长度;
char eh[] = { 'a','b','c' };//无初始的指定长度;
char fh[] = "abc";//无初始的指定长度;
printf("%d\n",sizeof(ch));
printf("%d\n", sizeof(dh));
printf("%d\n", sizeof(eh));
printf("%d\n", sizeof(fh));
printf("%d\n", strlen(ch));
printf("%d\n", strlen(dh));
printf("%d\n", strlen(eh));
printf("%d\n", strlen(fh));
//return 0;
}
在这里输出窗口中:
前两个10 都是因为有指定的空间 因为定义ch[10] dh[10]直接开辟了十个字节;
这里的3和4;没有提前定义空间3就是这个字符串有三个字节(自动终止),而4是因为在abc的后面有\0字符的存在来终止这个字符串.
再做如下测试:
#include <stdio.h>
int main()
{
char ch[10] = { 'a','b','c' };//有初始的指定长度;
char dh[10] = "abc";//有初始的指定长度;
char eh[] = { 'a','b','c' };//无初始的指定长度;
char fh[] = "abc";//无初始的指定长度;
printf("%d\n",sizeof(ch));
printf("%d\n", sizeof(dh));
printf("%d\n", sizeof(eh));
printf("%d\n", sizeof(fh));
printf("\n");
printf("%d\n", strlen(ch));
printf("%d\n", strlen(dh));
printf("%d\n", strlen(eh));
printf("%d\n", strlen(fh));
//return 0;
printf("\n" );
char buf[] = { 'a' };
char baf[] = "a";
printf("%d\n", sizeof(buf));
printf("%d\n", strlen(buf));
printf("%d\n", sizeof(baf));
printf("%d\n", strlen(baf));
}
由上图显而易见:
1.已经定义好初始空间的字符串,所占字节数为已定义空间字节数,所需字长为实际字符的个数;
2.对于没有定义初始空间的字符串,(两种情况)
(1){'a','b','c'} ==>>所占字节数为实际存在字符个数,所占字长数为随机值;
(2)"abc" ==>>所占字节数为实际存在字符数目+1(终止字符\0的存储),所占字长数为实际存在字符个数;
总结:sizeof和strlen的区别:
1. sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。
它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。
2.strlen 是函数,它的应用则不像 sizeof 那么广泛,strlen 的参数必须是char * 的指针,如果用strlen 计算数据类型 strlen(int)这种用法是错误的。strlen 的计算必须依赖字符序列中的’\0’ 字符,strlen 就是通过判断是否遇到’\0’ 来判断字符序列是否结束的。
常量和变量:
把这俩放在一块来说>>>
常量与变量的解释:
常量就是一成不变的量,变量就是变化的量,就按我来说
我是个男娃娃 这就相当于常量(这辈子改变不了)当然下辈子一定要做女人,而我的其他属性像年龄 身高呀 体重呀 这些都是变化的;相当于变量;
又例如一个优盘,它的内存是64G的话 这就是常量;而使用的多少空间或者存储了什么文件,图片就是变量;
定义变量的方法:
int high = 150;//定义初始值为150的high整形变量
float weight = 69.3f; //f代表浮点数;
char ch = 'c';定义字符变量c
在此声明:变量都是可以改动的,前提是在变量的作用域中;
局部变量与全局变量:
局部:就代表它的作用域为程序的一部分,一个小片段;程序走出作用域,这个变量就不复存在了;
全局:在这里代表从程序执行开始到执行结束都存在这个变量,而且也可以被使用.
个人想的一个经典例子:
#include <stdio.h>
int global = 2019;//全局变量
void try()
{
printf("global = %d\n", global);
}
int main()
{
void try();
try();
int local = 2018;//局部变量
//下面定义的global会不会有问题?
int global = 2020;//局部变量
try();
printf("global = %d\n", global);
printf("local = %d\n", local);
return 0;
}
分析:
不难看出 第一个try函数的global是吸收的全局变量;
而第二个try函数,在新定义的global=2020后面,按照想法,那么第二个try函数的global应该是2020;但结果不是这样,所以局部变量仅仅在本函数中起作用,不会影响调用的函数(传参除外)
最后的global = 2020 local = 2018 都是局部变量在起作用;
那如果给try函数中输出和local呢: 我们试试看
显然try函数是不识别main函数中的局部变量local的;
const常量(多说一丢丢)
关键字const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变,我想一定有人有这样的疑问,C语言中不是有#define吗,干嘛还要用const;
主要区别是#define仅仅是固定一个量或者固定一个运算表达式子而已
而const 可以使用在指针中 存储关系中 而且 大有作用的;
本次就到这里,牺牲了三个小时 希望有用;加油!