指针作为形参问题,bug一直没解决,求编程解答

C++语言 码拜 7年前 (2017-05-02) 1018次浏览
#include “iostream”
#include “stdio.h”
using namespace std;
class student
{
public:
char *name[2][1];
void Rename(char * (*myname)[1]);
};
char *p[2];
void student::Rename(char * (*myname)[1])
{
char string[] = “ba,ba,d”;
const char *spilt = “,”;
char *ptr = string;
int n = 0;
char * outer_ptr;
while((p[n] = strtok_s(ptr,spilt,&outer_ptr)) != NULL)
{
cout<<p[n]<<endl;
n++;
ptr = NULL;
}
myname[0][0] = p[0];
myname[1][0] = p[1];
outer_ptr = NULL;
}
void main()
{
student mstudent;
mstudent.Rename(mstudent.name);
cout<<mstudent.name[0][0]<<endl<<mstudent.name[1][0];   //为什么mstudent.name[0][0]不等于p[0]的值,假如是原因是指针作形参是拷贝传递,为什么mstudent.name[1][0]的值又改变了?
getchar();
}
运行的结果为
指针作为形参问题,bug一直没解决,求编程解答
解决方案

15

你的参数传递没有问题,但是你的函数里面的这一行有问题:

char string[] = "ba,ba,d";

这是一个函数本地变量,函数返回以后,它的空间被回收了,变得无效了。那么name[0][0]和name[1][0]指向的内容就无效了。所以你得不到正确的结果。
假如你改写成这样,就可以了:

static char string[] = "ba,ba,d";

这样系统在函数返回就不会回收空间。

5

取决于用的什么编译器。有的可以看到无效的指针,有的不能,还取决于调试器。但是把本地变量的指针赋给类成员变量是行不通的,学习了就好了。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明指针作为形参问题,bug一直没解决,求编程解答
喜欢 (0)
[1034331897@qq.com]
分享 (0)