C/C++プログラミング小知識(雑記)
条件と:&&
if(x&&y):xがtrueであるか否かを先に判断する.xがtrueであればyを判断し,xがfalseであればyを判断せずif文の内容を直接スキップする.エラーポイント:配列またはメモリオーバーフロー(RE:Runtime Error)
例:正しいコード
エラーコード
まずarr[n-i]が負数arr[負数]であるかどうかを判断する:この場合は未定義であり、境界を越えてアクセスする.
if(x&&y):xがtrueであるか否かを先に判断する.xがtrueであればyを判断し,xがfalseであればyを判断せずif文の内容を直接スキップする.エラーポイント:配列またはメモリオーバーフロー(RE:Runtime Error)
例:正しいコード
// 4 arr 0
// 0
#include
int arr[10]={
-1,2,3,4,5,6}, n=3;
int main(){
for(int i=0; i<=100; i++){
if(n-i>=0 && arr[n-i]>0){
printf("%d",arr[n-i]);
}
}
return 0;
}
エラーコード
#include
int arr[10]={
-1,2,3,4,5,6}, n=3;
int main(){
for(int i=0; i<=100; i++){
if(arr[n-i]>0 && n-i>=0){
printf("%d",arr[n-i]);
}
}
return 0;
}
まずarr[n-i]が負数arr[負数]であるかどうかを判断する:この場合は未定義であり、境界を越えてアクセスする.