You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言指针练习:如何获取指针指向元素在原数组中的对应位置

核心错误原因

  • 起始位置计算逻辑错误:startPos[i]本身就是指向names数组中第i个姓名首字符的指针,要得到该姓名在数组中的起始下标,直接计算两个指针的偏移量startPos[i] - names即可。原有代码中names[*startPos[i]]是先取首字符的ASCII值,再将该ASCII值作为下标取names数组的元素,输出结果自然不符合预期。
  • 长度计算逻辑错误:姓名区间的长度等于相邻两个起始指针的差值,直接用startPos[i+1] - startPos[i]即可得到。原有代码是对两个指针指向的字符的ASCII值做减法,计算逻辑完全错误。

修正后代码

void printNames(char names[], char *startPos[], int nrNames){
  for(int i = 0; i < nrNames; i++){
    printf("startPos[%d]=%02d length=%02d string=\"%s\"\n",
           i,
           (int)(startPos[i] - names),
           (int)(startPos[i+1] - startPos[i]),
           startPos[i]);
  }
}

补充说明

指针相减的返回值为ptrdiff_t类型,此处强转为int匹配%d的格式要求,练习场景下完全适用。该实现默认startPos数组长度为nrNames + 1,最后一个元素指向所有姓名存储的结束位置,是这类紧凑字符串存储结构的常规设计,刚好满足最后一个姓名的长度计算需求。

内容的提问来源于stack exchange,提问作者issoCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 05:15:01