为啥关系运算符不能在指针和数组中工作[关闭]

     2023-02-21     126

关键词:

【中文标题】为啥关系运算符不能在指针和数组中工作[关闭]【英文标题】:Why relational operator not working in pointers and arrays [closed]为什么关系运算符不能在指针和数组中工作[关闭] 【发布时间】:2021-06-25 12:10:18 【问题描述】:

为什么while(p != p+sz)是下面代码中的错误:-

#include<iostream>
using std::cout;
using std::endl;

int main()
  int arr[] = 1,2,3,4,5;
  int sz= (sizeof(arr)/sizeof(arr[0]));
  int *p = arr, *l = &arr[sz];

  while(p != p+sz)
    *p = 0;
    p++;
  

  for(auto i: arr)
    cout<<i<<endl;
  
  
  return 0;

   

         

但是,如果我将 while 条件更改为 while(p != l),它会起作用,但为什么我无法使用关系运算符( while(p &lt; p+sz) 或向指针添加整数值(while(p != p+sz)?

输出为:Segmentation fault (core dumped)

【问题讨论】:

sz 不为0 时,表达式p != p+sz 何时会为假?尝试为psz 提供一些会产生错误结果的值。 你在问为什么 x 不能等于 x+y 对于非零 y? while循环条件中,尝试p != p+sz,而不是p != arr+sz 【参考方案1】:

您将永远无法达到p + x 本身递增p,它将始终与p 完全是x 步骤。您循环将指针置于其边界之外,然后取消引用它。

您应该使用p 预先计算该值,然后使用它:

// ...
auto limit = p+sz; // Pre-compute the limit
while (p != limit)
    *p = 0;
    p++;
 // ...

【讨论】:

非常感谢,您用更好的解决方案解释得很好。谢谢:)【参考方案2】:

为什么关系运算符不能处理整数?

更简单的例子,同样的效果:

int main()
  int sz= 5;
  int p = 0;

  while(p != p+sz)
    p++;
  

   

无论你增加多少p,它永远不会等于p+5

【讨论】:

我明白了,问这样的问题真是太愚蠢了。但我真的太困惑了,谢谢伙计 @Shubharthak 提问绝不是愚蠢的。另外,不确定是不是只有我一个人,但我认为回答“哦,这只是一个愚蠢的错误”这样的答案是不礼貌的,只是说......

为啥显示:-ms-flex; -ms-justify-content:中心;不能在 IE10 中工作? [关闭]

】为啥显示:-ms-flex;-ms-justify-content:中心;不能在IE10中工作?[关闭]【英文标题】:Whydoesdisplay:-ms-flex;-ms-justify-content:center;notworkinIE10?[closed]为什么显示:-ms-flex;-ms-justify-content:中心;不能在IE10中工作?[关闭]【发布时间】... 查看详情

Qwebkit 和 flash 播放器,为啥它不能在 windows 中工作

】Qwebkit和flash播放器,为啥它不能在windows中工作【英文标题】:Qwebkitandflashplayer,whyitsnotworkinginwindowsQwebkit和flash播放器,为什么它不能在windows中工作【发布时间】:2010-06-0811:14:29【问题描述】:我使用Qwebkit并且每次我加载youtube... 查看详情

为啥 MPMoviePlayerController 能在模拟器中工作,而不能在设备中工作?

】为啥MPMoviePlayerController能在模拟器中工作,而不能在设备中工作?【英文标题】:WhydoesMPMoviePlayerControllerworkinthesimulator,butnotthedevice?为什么MPMoviePlayerController能在模拟器中工作,而不能在设备中工作?【发布时间】:2010-08-1118:57... 查看详情

为啥 getResourceAsStream() 可以在 IDE 中工作,但不能在 JAR 中工作?

】为啥getResourceAsStream()可以在IDE中工作,但不能在JAR中工作?【英文标题】:WhydoesgetResourceAsStream()workintheIDEbutnottheJAR?为什么getResourceAsStream()可以在IDE中工作,但不能在JAR中工作?【发布时间】:2013-04-0911:46:34【问题描述】:我... 查看详情

为啥 EnumWindows 不能在服务中工作?

】为啥EnumWindows不能在服务中工作?【英文标题】:WhyEnumWindowsNotWorkinginservice?为什么EnumWindows不能在服务中工作?【发布时间】:2015-08-2408:03:56【问题描述】:我只是想枚举系统中的所有***窗口。当我在exe中使用EnumWindows函数时... 查看详情

为啥 printf() 可以在内核中工作,但使用 std::cout 不能?

】为啥printf()可以在内核中工作,但使用std::cout不能?【英文标题】:Whydoesprintf()workwithinakernel,butusingstd::coutdoesn\'t?为什么printf()可以在内核中工作,但使用std::cout不能?【发布时间】:2021-02-0117:20:08【问题描述】:我一直在探索... 查看详情

为啥 printf() 可以在内核中工作,但使用 std::cout 不能?

】为啥printf()可以在内核中工作,但使用std::cout不能?【英文标题】:Whydoesprintf()workwithinakernel,butusingstd::coutdoesn\'t?为什么printf()可以在内核中工作,但使用std::cout不能?【发布时间】:2021-02-0117:20:08【问题描述】:我一直在探索... 查看详情

为啥这个 jQuery AJAX PUT 可以在 Chrome 中工作,但不能在 FF 中工作

】为啥这个jQueryAJAXPUT可以在Chrome中工作,但不能在FF中工作【英文标题】:WhydoesthisjQueryAJAXPUTworkinChromebutnotFF为什么这个jQueryAJAXPUT可以在Chrome中工作,但不能在FF中工作【发布时间】:2013-05-1807:22:54【问题描述】:在Chrome中,这... 查看详情

为啥以下条件运算符在包含 Nullable 类型的 StringBuilder 中工作异常?在 C# 中?

】为啥以下条件运算符在包含Nullable类型的StringBuilder中工作异常?在C#中?【英文标题】:WhythefollowingConditionalOperatorworksstrangelyinStringBuildercontainingNullabletype?inC#?为什么以下条件运算符在包含Nullable类型的StringBuilder中工作异常?在... 查看详情

Kivy:为啥 ScrollView 不能在 GridLayout 中工作?

】Kivy:为啥ScrollView不能在GridLayout中工作?【英文标题】:Kivy:Whyisn\'tScrollViewworkinginsideGridLayout?Kivy:为什么ScrollView不能在GridLayout中工作?【发布时间】:2019-06-0123:16:06【问题描述】:我在ScrollView中有一个GridLayout,但由于某种... 查看详情

为啥朴素贝叶斯不能像逻辑回归一样在 Spark MLlib 管道中工作?

】为啥朴素贝叶斯不能像逻辑回归一样在SparkMLlib管道中工作?【英文标题】:WhydoesNaiveBayesnotworkinSparkMLlibPipelinelikeLogisticRegression?为什么朴素贝叶斯不能像逻辑回归一样在SparkMLlib管道中工作?【发布时间】:2017-05-0818:14:10【问题... 查看详情

为啥 SwiftUI ObservedObject 不能在列表行中工作?

】为啥SwiftUIObservedObject不能在列表行中工作?【英文标题】:WhywouldSwiftUIObservedObjectnotworkinaListRow?为什么SwiftUIObservedObject不能在列表行中工作?【发布时间】:2019-11-2007:16:47【问题描述】:我遇到了一个问题,即主窗格列表视图... 查看详情

为啥 Arduino Intellisense 不能在 VSCode 中工作?

】为啥ArduinoIntellisense不能在VSCode中工作?【英文标题】:WhyWon\'tArduinoIntellisenseWorkinVSCode?为什么ArduinoIntellisense不能在VSCode中工作?【发布时间】:2018-07-3113:43:44【问题描述】:我在VSCode中安装了Arduino扩展Arduinoextension,它应该包... 查看详情

为啥 font-lock-fontify-buffer 在 minibuffer 中工作时不能在 elisp 中工作?

】为啥font-lock-fontify-buffer在minibuffer中工作时不能在elisp中工作?【英文标题】:Whydoesn\'tfont-lock-fontify-bufferworkfromelispwhenitworksfromtheminibuffer?为什么font-lock-fontify-buffer在minibuffer中工作时不能在elisp中工作?【发布时间】:2012-02-0220:... 查看详情

为啥 VStack 不能在带有滚动视图的 GeometryReader 中工作?

】为啥VStack不能在带有滚动视图的GeometryReader中工作?【英文标题】:whyisVStacknotworkinginGeometryReaderwithscrollview?为什么VStack不能在带有滚动视图的GeometryReader中工作?【发布时间】:2020-04-0107:05:37【问题描述】:我使用vStack的滚动... 查看详情

为啥Bootstrap datepicker不能在ajax成功功能中工作[重复]

】为啥Bootstrapdatepicker不能在ajax成功功能中工作[重复]【英文标题】:WhyBootstrapdatepickernotworkinginajaxsuccessfunction[duplicate]为什么Bootstrapdatepicker不能在ajax成功功能中工作[重复]【发布时间】:2018-02-2412:08:33【问题描述】:$.ajax(url:\'/S... 查看详情

为啥 atprogram 不能在批处理文件中工作?

】为啥atprogram不能在批处理文件中工作?【英文标题】:Whyisatprogramnotworkingfromwithinabatchfile?为什么atprogram不能在批处理文件中工作?【发布时间】:2017-01-3018:55:55【问题描述】:我正在使用专门为我工作的公司开发的嵌入式系统... 查看详情

为啥我的背景颜色不能在 ComboBox 中工作

】为啥我的背景颜色不能在ComboBox中工作【英文标题】:WhyisntmyBackgroundcolorworkinginaComboBox为什么我的背景颜色不能在ComboBox中工作【发布时间】:2016-12-2513:29:13【问题描述】:我的组合框唯一不起作用的部分是背景颜色。我希望... 查看详情