C语言学习之路(二)数据类型基本知识点
2016-07-11 14:49
330 查看
1.什么是数据类型?
数据集合的划分,不同数据类型对CPU 的意义是不同的
1. 数据类型有哪些?
3.如何定义变量以及左右法则
1.定义变量的左右法则:
左右法则:首先从最里面的圆括号内未定义的标识符开始阅读看起,然后往右看,再往左看。每当遇到圆括号时,就应该掉转阅读方向。一旦解析完圆括号里面所有的东西,就跳出圆括号。重复这个过程直到整个声明解析完毕。
定义变量:
(1)int a;
这个应该被理解为“declare a as anint”(a是一个int型的变量)。
(2)int *a;
这个应该被理解为“declare a as anint *”(a是一个int *型的变量),或者说a是一个指向一个int型变量的指针。(a中保存的是一个地址)
而int* p,q;
第一眼看去,好像是p和q都是int*类型的,但事实上,只有p是一个指针,而q是一个最简单的int型变量。
(3)int **a;
整型指针的指针变量
如:int num = 5;
int *p = #
int **pp = & p;
图解为:
(4)int a[10];
整型数组
(5)int *a[10];
整型指针数组
这里,a被声明为一个包含10个元素(int类型的指针)的数组。
(6)int (*a)[10];
整型数组指针变量
这里,a被声明为一个指向一个10元素(int类型)数组的指针.
(7)int (*a)(int);
函数指针变量,即指针变量保存着函数地址(指针指向函数)
该函数形参为int,返回整型数。
(8)int (*a[10])(int);
函数指针数组,
int * (* (*fp1) (int) ) [10];
阅读步骤:
1. 从变量名开始-------------------------------------------- fp1
2. 往右看,什么也没有,碰到了),因此往左看,碰到一个* ------ 一个指针
3. 跳出括号,碰到了(int)----------------------------------- 一个带一个int参数的函数
4. 向左看,发现一个*--------------------------------------- (函数)返回一个指针
5. 跳出括号,向右看,碰到[10]------------------------------ 一个10元素的数组
6. 向左看,发现一个*--------------------------------------- 指针
7. 向左看,发现int----------------------------------------- int类型
总结:fp1被声明成为一个函数的指针,该函数返回指向指针数组的指针.
再来看一个例子:
int *( *( *arr[5])())();
阅读步骤:
1. 从变量名开始-------------------------------------------- arr
2. 往右看,发现是一个数组---------------------------------- 一个5元素的数组
3. 向左看,发现一个*--------------------------------------- 指针
4. 跳出括号,向右看,发现()-------------------------------- 不带参数的函数
5. 向左看,碰到*------------------------------------------- (函数)返回一个指针
6. 跳出括号,向右发现()------------------------------------ 不带参数的函数
7. 向左,发现*--------------------------------------------- (函数)返回一个指针
8. 继续向左,发现int--------------------------------------- int类型
总结:arr是函数指针数组,该数组的元素指向一个形参为空,返回值为函数指针的函数,该函数指向一个形参为空,返回值为整型指针。
(1)float ( * ( *b()) [] )();
b是个函数,形参为空,返回值为数组指针,该指针指向一个函数指针数组,该数组里的元素指向一个形参为空,返回值为float的函数;
(2)void * ( *c) ( char, int (*)());
c:函数指针变量,指向函数形参为char,和函数指针返回值为void *.
(3)float ( * ( * e[10]) (int &) )[5];
e:函数指针数组,该函数形参为整型指针,返回值为浮点型数组指针。
4、强制类型转化
char<int <float<double(隐式类型转换)
数据集合的划分,不同数据类型对CPU 的意义是不同的
1. 数据类型有哪些?
3.如何定义变量以及左右法则
1.定义变量的左右法则:
左右法则:首先从最里面的圆括号内未定义的标识符开始阅读看起,然后往右看,再往左看。每当遇到圆括号时,就应该掉转阅读方向。一旦解析完圆括号里面所有的东西,就跳出圆括号。重复这个过程直到整个声明解析完毕。
定义变量:
(1)int a;
这个应该被理解为“declare a as anint”(a是一个int型的变量)。
(2)int *a;
这个应该被理解为“declare a as anint *”(a是一个int *型的变量),或者说a是一个指向一个int型变量的指针。(a中保存的是一个地址)
而int* p,q;
第一眼看去,好像是p和q都是int*类型的,但事实上,只有p是一个指针,而q是一个最简单的int型变量。
(3)int **a;
整型指针的指针变量
如:int num = 5;
int *p = #
int **pp = & p;
图解为:
(4)int a[10];
整型数组
(5)int *a[10];
整型指针数组
这里,a被声明为一个包含10个元素(int类型的指针)的数组。
(6)int (*a)[10];
整型数组指针变量
这里,a被声明为一个指向一个10元素(int类型)数组的指针.
(7)int (*a)(int);
函数指针变量,即指针变量保存着函数地址(指针指向函数)
该函数形参为int,返回整型数。
(8)int (*a[10])(int);
函数指针数组,
int * (* (*fp1) (int) ) [10];
阅读步骤:
1. 从变量名开始-------------------------------------------- fp1
2. 往右看,什么也没有,碰到了),因此往左看,碰到一个* ------ 一个指针
3. 跳出括号,碰到了(int)----------------------------------- 一个带一个int参数的函数
4. 向左看,发现一个*--------------------------------------- (函数)返回一个指针
5. 跳出括号,向右看,碰到[10]------------------------------ 一个10元素的数组
6. 向左看,发现一个*--------------------------------------- 指针
7. 向左看,发现int----------------------------------------- int类型
总结:fp1被声明成为一个函数的指针,该函数返回指向指针数组的指针.
再来看一个例子:
int *( *( *arr[5])())();
阅读步骤:
1. 从变量名开始-------------------------------------------- arr
2. 往右看,发现是一个数组---------------------------------- 一个5元素的数组
3. 向左看,发现一个*--------------------------------------- 指针
4. 跳出括号,向右看,发现()-------------------------------- 不带参数的函数
5. 向左看,碰到*------------------------------------------- (函数)返回一个指针
6. 跳出括号,向右发现()------------------------------------ 不带参数的函数
7. 向左,发现*--------------------------------------------- (函数)返回一个指针
8. 继续向左,发现int--------------------------------------- int类型
总结:arr是函数指针数组,该数组的元素指向一个形参为空,返回值为函数指针的函数,该函数指向一个形参为空,返回值为整型指针。
(1)float ( * ( *b()) [] )();
b是个函数,形参为空,返回值为数组指针,该指针指向一个函数指针数组,该数组里的元素指向一个形参为空,返回值为float的函数;
(2)void * ( *c) ( char, int (*)());
c:函数指针变量,指向函数形参为char,和函数指针返回值为void *.
(3)float ( * ( * e[10]) (int &) )[5];
e:函数指针数组,该函数形参为整型指针,返回值为浮点型数组指针。
4、强制类型转化
char<int <float<double(隐式类型转换)
相关文章推荐
- C语言之父丹尼斯·里奇
- 训练题 极品飞车(并查集应用) 解题报告
- Unhandled exception in al.exe(KERNELBASE.DLL):0xE06D7363:Microsoft C++Exception
- C++引用详解
- 如何根据基类指针来判断这个基类是由那个子类转换而来!
- C语言概述
- c++ 麻将序列转换为16进制牌
- C语言中static关键词使用在函数外部和内部的疑惑
- C语言简述
- Protobuf使用摘要和demo
- Visual C++ Warning C4819 解决方法
- 【Sicily 1937】导游
- cpp环境【VIJOS1698】导游
- C语言学习笔记----realloc
- 你可能不知道的C++语法:文本操作符
- 1. Two Sum
- The Basic Data Types1
- c++ primer plus 学习第一天--第二章
- C++异常处理
- 0707排序算法