对类里面的私有指针,自己犯这样的错误:
1、 对返回指针直接赋值 god.return_pointer() = "change/n"; 当然这样编译器会报错。
2、妄想通过别的指针赋值
char* p = god.return_pointer();
p = "change/n";
这样私有成员指针当然没有被改变到。
确做法应该是增加一个 void change_pointer(char* pTo) 成员函数。
// FILE NAME:retrun_pointer_addr_change.cpp
#include <stdio.h>
#include <stdlib.h> // exit()
#include<string.h> // bzero()
#include<sys/time.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/stat.h> /*stat用到*/
#define BUFFER_SIZE 50
class Goood
{
public:
Goood()
{
str = (char*)malloc(BUFFER_SIZE);
}
~Goood()
{
free(str);
}
void init_pointer()
{
memcpy(str,"init_pointer/n",sizeof("init_pointer/n"));
pointer = str;
}
void printf_pointer()
{
printf("pointer : %s/n",pointer);
}
char* return_pointer()
{
return pointer;
}
void change_pointer(char* pTo)
{
pointer = pTo;
}
private:
char* pointer;
char* str;
};
int main()
{
Goood god;
god.init_pointer();
god.printf_pointer();
char* tem_pointer1 = god.return_pointer();
memcpy(tem_pointer1,"change/n",sizeof("change/n"));
god.printf_pointer();
/* 错误做法一 */
/*
god.return_pointer() = "change/n";
*/
/* 错误做法二 */
/*
char p = god.return_pointer();
p = "change/n";
*/
char tem_pointer2[] = "change pointer2/n";
god.change_pointer(tem_pointer2);
god.printf_pointer();
return 0;
}