C语言:指针数组、const指针+计算机系统:字节顺序
2017-01-13 17:20
260 查看
知识点(结论)
1. 《深入理解计算机系统》中的解释:
在C语言中,我们能够用数组表示法来引用指针,同时我们也能用指针表示法来引用数组元素。
2. 引申一下const,int const *p与int *const p。
但是这个链接里的例子有点小问题,不太好理解,这里总结一下:直接修改 test1 = 数字; 这样的格式。这三个声明方式都可以被修改的。
所以:
三的实例应该加上 *p = 4;(可运行)
四的实例应该加上test2 = 3;(可运行)
结论是:
const *p表示*p不能被修改;
*const p 表示p不能被修改;
const int *const p表示p与*p都不能被修改;
但是!!!!!p指向的内容,比如是test1的话,test1的值在三个情况下都是可以修改的!
3. 具体解释:
//普通数组用法: int i, a[] = {1,2,3,4}; for(i = 0; i < 4; i++){ printf("%d\n", a[i]); } //我们还可以这样访问元素 //a就是数组名,其实就是一个常量指针 for(i = 0; i < 4; i++){ printf("%d\n", *(a+i)); } //因此我们可以用指针表示法来引用数组 int *pa; pa = a; for(i = 0; i < 4; i++){ printf("%d\n", pa[i]); printf("%d\n", *(pa+i)); printf("%d\n", *pa++); //printf("%d\n", *a++);就会报错,因为a(数组名)是一个常量指针,不能被修改 //同理,int *const pa = a; pa就不能被修改了pa++就会报错 }
代码示例(数组表示法来引用指针)
1. 来源:《深入理解计算机系统》字节顺序 探索 代码
2. 目的:使用强制类型转换(cast)来访问和打印不同程序对象(int、float、pointer)的字节表示:
#include<stdio.h> //使用typedef命名数据类型,改善代码可读性 typedef unsigned char *byte_pointer; void show_bytes(byte_pointer start, int len){ int i; for(i = 0; i < len; i++) //C格式化指令"%.2x"表示整数必须用至少两个数字的十六进制格式输出 //引用start[i]表示我们想要读取以start指向的位置为起始的第i个位置处 //的字节,因为是数组表示法来引用指针,所以不用加上* //相当于start这个数组名(指针)=&x printf("%.2x", start[i]); printf("\n"); } void show_int(int x){ show_bytes((byte_pointer) &x, sizeof(int)); } void show_float(float x){ show_bytes((byte_pointer) &x, sizeof(float)); } void show_pointer(void *x){ show_bytes((byte_pointer) &x, sizeof(void *)); } void test_show_bytes(int val){ int ival = val; float fval = (float) ival; int *pval = &ival; show_int(ival); show_float(fval); show_pointer(pval); }
3. 结果:
12345的十六进制为 0x00003039
小端:39 30 00 00(低字节在前)
大端: 00 00 30 39(高字节在前,和平时我们使用数字的习惯相同)
相关文章推荐
- 深入理解计算机系统(3.8)---数组、异质结构以及指针的详解(十分重要)(难度较高)【呕心沥血版】
- 深入理解计算机系统(3.8)---数组、异质结构以及指针的详解(十分重要)(难度较高)【呕心沥血版】
- 用C语言关于学生管理系统的几种实现方法(一位数组,二维数组,指针,结构体)
- 【C语言】用指针数组完成:将若干字符串安字母顺序输出
- 再谈C语言中数组和指针之间的互操作
- C语言中字符数组和字符串指针分析
- 最近对C语言的兴趣没有以前那么强烈了 数组 指针,怎么搞!!!!!!!!
- 再谈C语言中数组和指针之间的互操作
- C语言中字符数组和字符串指针分析
- 水滴石穿C语言之指针、数组和函数(转载)
- 水滴石穿C语言之指针、数组和函数
- C语言多维数组指针的技巧
- C语言专题――数组与指针
- C语言之指针、数组和函数
- C语言之指针、数组和函数
- 水滴石穿C语言之指针、数组和函数
- 水滴石穿C语言之指针、数组和函数
- C语言之指针、数组和函数
- 再谈C语言中数组和指针之间的互操作
- C语言中指针和数组名小趣