對類裏面的私有指針,自己犯這樣的錯誤:
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;
}