- 指针求一维数组最大值
瑕疵版本:#include<iostream> #include<stdio.h> using namespace std; int main() { double a[10], * p, max; for (int i = 0; i < 10; i++) { scanf("%lf", &a[i]); } p = a; max = a[0]; while (p != &a[9]) { cout << *p << " "; if (*p > max)max = *p; p++; } cout << max << endl; return 0; }
有警告,但是我确实不需要返回值,好像是因为版本,现在用scanf_s了
正解:第一是while那里,需要循环体内部包含a[9],当指针指到不存在的地址时候其实不会报错,就像a[10]
第二是scanf_s,很多带“_s”后缀的函数是为了让原版函数更安全,传入一个和参数有关的大小值,避免引用到不存在的元素,防止hacker利用原版的不安全性(漏洞)黑掉系统#include<iostream> #include<stdio.h> using namespace std; int main() { double a[10], * p, max; for (int i = 0; i < 10; i++) { scanf_s("%lf", &a[i]); } p = a; max = a[0]; while (p != &a[10]) { cout << *p << " "; if (*p > max)max = *p; p++; } cout << max << endl; return 0; }
运行:
今天看了会儿自己最不熟悉的指针、数组,然后学到了scanf函数