本帖最后由 tk3184020 于 2021-8-22 11:12 编辑
程序问题:
没搞清楚程序的作用,是比较p1, p2串中对应位置相同值吗?
如果是我想的这样,代码需要改动一下
#include<iostream>
using namespace std;
int main()
{
char *p1 = "aaaabbbjnnmk";
char *p2 = "cccbbyyiomjs";
char bijiao = 'a';
char s[12] = { 0 };
int idx = 0;
int idy = 0;
int x = 0;
int y = 0;
for (; bijiao <= 'z'; bijiao++) {
for (idx = 0; idx < 12; idx++) {
x = 0;
y = 0;
if (bijiao == *(p1 + idx)) {
x++;
}
if (bijiao == *(p2 + idx)) {
y++;
}
if (x > 0 && y > 0) {
s[idy] = bijiao;
idy++;
}
}
}
cout << s << endl;
return 0;
}
大约需要改这几处:
1.修改s的大小,现在s里面是空的不能赋值的。s[idy] = bijiao;执行程序应该就崩了
2.x 和 y的归零操作在子循环语句开始的时候(逻辑问题自己想想就明白了)
3.自循环的idx最大值11 因为上面两个串中一共12个元素 0-11 12个数
4.小于等于才能去到z
这样修改运行输出为b 就是p1 和 p2 中相应位置对应相等的元素
其实要想完成这个功能 应该还有更简单的实现方式,总感觉这个有点繁琐了,我看老半天也看不懂它啥意思。。。。
new的问题:
new是c++中的关键字,是程序员主动的在堆中分配内存用的,这个关键字是对c语言中malloc函数的再一次封装,它的本质和malloc分配内存差不多,可以简单理解为 new = malloc + 构造函数。 同样 与delete对应的是 c语言中的free 都是手动释放堆中申请的内存
你自己写的那个数组和指针,是临时的变量,可以简单理解为在一个函数执行之后就被释放了
这就是你写的 和new 的区别, new只能去手动释放, 你自己写的那个函数过后他就给自动释放了
new出来的东西,往往在函数结尾返回一个指针,或者在函数形参传入指针,为了在这个函数执行之后可以再次使用new出来的这块内存
比如说:(通过函数返回)
int* testfunc() {
new 一个
把new出来的东西进行某种操作
return 把这个指针返回 这样的话 返回去的指针就能在其他地方用了,等你不需要的时候就delete
}
再比如说:(函数形参返回)
void testfunc(int *x) {
x传进来可以是空的
new一个 让x指向它,这样的话 x就可以在这个函数里面完成赋值,在函数运行结束就可以继续用了
}