关于指针的减法(加法)运算
在输入字符中查找有无‘k',若存在则输出第一次出现该字符的位置。#include <stdio.h>
main()
{
char str[20];
char *ps;
int found = 0;
printf("input a string (less than 20 characters ):\n");
ps = str;
gets(str);
while(!found && *ps != '\0')
{
if(*ps == 'k')
found = 1;
else
ps++;
}
if(found)
printf("there is a 'k' in the string ,position=%d\n",ps-str);
else
printf("there is no 'k' in the string");
}
关于最后的printf("%d",ps-str);
我着实想不通得到的结果为什么恰好是数组的下标数,于是自己探索了一番,下面是我的过程
我先写了一个小程序应证
#include "stdio.h"
void main()
{
int a[20];
int *p = &a[19];
printf("%d",p - a);
}
结果为19.
于是我仔细看 p - a,觉得这就是2个地址相减嘛!小弟高兴的去应证在编译器上得到p的地址为124505,a[0]的地址为1244976.本以为它们相减得到19,可是确实76.
想不通为什么,于是用sizeof求的下数组a的长度,得到的是80,原来数组占4个字节
最终得出结论 指针运算中,作加减运算的一个单位长度不是一个字节,而是该指针所指向的一个元素/变量所占用的字节 。
望大神给出专家的解释,或者给出更好的求下标位置的方法(不改变原程序的算法)······