c指针加减值得问题
2015-09-22 10:11
363 查看
(1)指针加减整数:一度很疑惑数据指针在同种机器和编译器下长度是相同的,但是不同类型指针加上同一个整数之后值却不一样。
int main(void)
{
int num;
char c ;
int * a = #
char* str= &c;
printf("%d\n", sizeof(void *));
printf("%d %d\n", sizeof(int *), sizeof(char *));
printf("%d %d\n", sizeof(a), sizeof(str));
printf("%x %x\n", a, str);
printf("%d %d\n", sizeof(*a), sizeof(*str) );
++a;
++str;
printf("%x %x\n", a, str);
return 0;
}
后来想通了,指针长度相同是存储的地址,需要同样的字节数来存储指针指向地址值。当指针加整数时目的一般是寻找指向的值而不是为了计算无用的地址值,应该是出于这种考量,c标准规定了给指针加上一个整数实际上加的数是这个整数和指针数据类型对应字节数的乘积。虽然规定为加整数就为地址加上实际的整数同样可以人为控制乘以数据类型对应字节数,但是可能这样一般并没有意义,出于简单目的,于是就有了这个顶。
减去整数同加法。
(2)两个指针相减:这样会得到两个地址的差值。通常这个差值没有什么用,但是一般可以用来判断数组中的元素顺序呢。应该出于这个用处的目的,指针差值规定为它们之间相差的“单位”数,即指向数据类型的单位数。实际计算为地址差值/sizeof(类型)。
以上的标准规定是准确的,一些想法是自己的理解,如果错了希望不要误导他人。
int main(void)
{
int num;
char c ;
int * a = #
char* str= &c;
printf("%d\n", sizeof(void *));
printf("%d %d\n", sizeof(int *), sizeof(char *));
printf("%d %d\n", sizeof(a), sizeof(str));
printf("%x %x\n", a, str);
printf("%d %d\n", sizeof(*a), sizeof(*str) );
++a;
++str;
printf("%x %x\n", a, str);
return 0;
}
后来想通了,指针长度相同是存储的地址,需要同样的字节数来存储指针指向地址值。当指针加整数时目的一般是寻找指向的值而不是为了计算无用的地址值,应该是出于这种考量,c标准规定了给指针加上一个整数实际上加的数是这个整数和指针数据类型对应字节数的乘积。虽然规定为加整数就为地址加上实际的整数同样可以人为控制乘以数据类型对应字节数,但是可能这样一般并没有意义,出于简单目的,于是就有了这个顶。
减去整数同加法。
(2)两个指针相减:这样会得到两个地址的差值。通常这个差值没有什么用,但是一般可以用来判断数组中的元素顺序呢。应该出于这个用处的目的,指针差值规定为它们之间相差的“单位”数,即指向数据类型的单位数。实际计算为地址差值/sizeof(类型)。
以上的标准规定是准确的,一些想法是自己的理解,如果错了希望不要误导他人。
相关文章推荐
- 关于指针的一些事情
- Lua和C语言的交互详解
- C# Pointer指针应用实例简述
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言查找数组里数字重复次数的方法
- C++智能指针实例详解
- C语言泛型编程实例教程