【C语言】【unix c】数据类型
来源:互联网 发布:电脑运行网络命令大全 编辑:程序博客网 时间:2024/05/17 21:57
五、数据类型 1、什么是数据类型? 在内存中【占用】的字节数,再者就是这些数据从内存中【取出来的组织方式】 short,long,float,double,void,数组,*(指针不是地址,是一个类型,地址是指针),结构体,联合,枚举,等都是类型,他们占用存储区的大小,方式,及取出方式各有不同 例如: char *p : 意思是定义一个指针类型(4字节)的p变量,然后在取内容时在所指的地址里取1个字节(char)的内容 举例: 编写point.c 程序: 1 #include <stdio.h> 2 3 int main() { 4 int var_i = 321; 5 char var_c = 'v'; 6 int *p; 7 char **q; 8 p = (int *)&var_c; 9 q = (char **)&p; 10 printf("*p=%d\n", *p); 11 printf("**q=%d\n", **q); 12 return 0; 13 } 运行: 没有进行强制类型转换时编译后有警告,但是可以运行, 结果: point.c: 在函数‘main’中: point.c:7: 警告: 从不兼容的指针类型赋值 tarena@ubuntu:~/day/day23$ ./a.out *p=75780214 **q=118 分析: 一级指针指向字符类型的存储区,存储的是1个字节,但是在取内容时用的int类型(4个字节)(v:1110110)(以int型取出:00000100 10000100 01010000 01110110)可以看出前面多取了2个字节。 二级指针的取值方式是char的,所以取值正确.在二级指针下,p的取值方式是*(指针类型的),*p取值方式也是*(指针类型),**p的取值方式是char-------------------------------------------------------------------------------- 2、指针和一维数组的关系: int arr[3]:arr是数组常量即类型已经分配,是一个数组类型。arr是名字,这个数组里有3个元素,每个类型都是int类型的且三个元素的地址空间是连续的。 int *p=arr: p++是向后移动4个字节(也就是1个int,因为*p是以int类型取值的,如果改为char *p的话,一次去1个字节) 举例: #include <stdio.h> int main() { int arr[3] = {1,2,3}; char *p = arr; p++; printf("%p\n", p); return 0; } 结果:没有自增:0xbfafae40 int下自增:0xbfc8f1b4 char下自增:0xbf896c71 char *q=arr: q++向后移动1个字节 char *p[]; p是数组的名字,数组里的每个元素都是指针类型的即指针数组,也可以是字符串的列表-------------------------------------------------------------------------------- 3、二维数组:(int[3]也是一个类型,) int arr[2][3] = {{1,2,3},{4,5,6}}; arr[0]: 访问方式是int,每次加1移动1个int型地址 arr: 访问方式是 int3,即每次加1移动3个int型地址 (*(arr+1))+1:里面的1是一次移动3个,外面的一次移动1个 int (*p)[3]; p是指针类型的变量,p+1 向后移动3个int 这是一个数组指针 int[3]是一个类型; p = arr; p是指针类型的变量,arr是数组的名字,是常量, p+1可以,但是arr+1不可以 4、函数和指针的结合: void *malloc(size_t size); 返回一个void *类型的地址,意思是返回一个无访问类型的地址,也就是不访问 int (*fun_t)(int,int); *fun_t是函数指针类型的【变量】,访问方式是 int(int,int);即这也是一个类型 int (*fun_t[4])(int,int); (*fun_t[4])中fun_t 是数组的名字,有4个元素,每个元素都是指针类型的。这个变量遵循函数的访问方式,需要2个int类型的行参和返回一个int型的值 举例: #include <stdio.h> #include <t_math.h> int main(void) { int a= 6,b = 3; int (*f[4])(int, int) = {t_add, t_sub, t_mul, t_div};//f是数组名,里面有4个元素,每个元素是一个指针类型的。遵循函数的访问方式,需要传入2个行参,返回一个int型的值。这里数组中的指针指向了4个函数。 //f=t_add; printf("%d+%d=%d\n", a, b, f[0](a, b)); printf("%d-%d=%d\n", a, b, f[1](a, b)); printf("%d*%d=%d\n", a, b, f[2](a, b)); printf("%d/%d=%d\n", a, b, f[3](a, b)); return 0; } 运行: tarena@ubuntu:~/day/day23/tmath$ gcc t_math.c t_sul.c t_add.c tarena@ubuntu:~/day/day23/tmath$ ./a.out 6*2=12 6+2=8 6-2=4 6/2=3 5、主机字节序 数据的高字节存放在内存的低地址中:大端。网络通信中大部分产用大端,pc中大部分是小端 c程序判断: #include <stdio.h> int am_little_endian () { unsigned short i=1; return (int)*((char *)(&i)) ? 1 : 0; } int main() { if(am_little_endian()) { printf("本机字节序为小段序!\n"); }else { printf("本机字节序为大段序!\n"); } return 0; }
阅读全文
0 0
- 【C语言】【unix c】数据类型
- 【C语言】C语言数据类型
- 【C语言】【unix c】信号量
- UNIX与C语言
- c语言-数据类型-基本数据类型
- C语言之数据类型
- c语言常见数据类型
- C语言的数据类型
- C语言数据类型
- c语言数据类型
- C语言数据类型
- C语言的数据类型
- C语言学习--数据类型
- C语言的数据类型
- C语言 数据类型
- C语言的数据类型
- C语言的数据类型
- C语言基本数据类型
- 百度之星初赛(A)--数据分割----启发式合并
- solr6.6在win下安装和mysql的配置
- PHP 算法 排序
- CSU1980: 不堪重负的树
- MyBatis数据缓存
- 【C语言】【unix c】数据类型
- Maven仓库
- 常用目录地址
- (转)常见的用户密码加密方式以及破解方法
- Java密码学
- 数据结构-AVL树和红黑树的对比
- 拥抱.NET Core系列:Logging (1)
- 设计模式_简单工厂模式(2)
- 树莓派3-搭建SAMBA服务器