考虑
#include <cstdio>
int main() {
char a[10];
char *begin = &a[0];
char *end = &a[9];
int i = end - begin;
printf("%i\n", i);
getchar();
}
Run Code Online (Sandbox Code Playgroud)
#include <cstdio>
int main() {
int a[10];
int *begin = &a[0];
int *end = &a[9];
int i = end - begin;
printf("%i\n", i);
getchar();
}
Run Code Online (Sandbox Code Playgroud)
#include <cstdio>
int main() {
double a[10];
double *begin = &a[0];
double *end = &a[9];
int i = end - begin;
printf("%i\n", i);
getchar();
}
Run Code Online (Sandbox Code Playgroud)
以上三个例子也打印9
我可以知道,我应该如何理解9.这是什么意思?
Chu*_*dad 12
9表示&a [9]和&a [0]之间的类型'T'的元素数(其中T分别是char,int,double).
它们之间的实际字节数是(&a[9] - &a[0])*sizeof(T).请注意,根据定义,sizeof(char)为1.进一步注意,字节不是强制为8位.相反,它需要多个8位内存位置来保存实现的基本字符集中的所有字符.
编辑:正如@pmg指出的那样,一个字节被定义为足够宽的内存位置,以容纳实现的基本字符集中的所有字符.
指向某种类型的指针之间的差异是它们之间的实例数(也就是它等于数组索引之间的差异).或者换句话说它相当于(不确定正确的整数类型)
((int)end - (int)begin)/sizeof(type)
Run Code Online (Sandbox Code Playgroud)
6.5.6.9当减去两个指针时,两个指针都指向同一个数组对象的元素,或者指向数组对象的最后一个元素的元素; 结果是两个数组元素的下标的差异