字符串指针的地址的传递
#include <iostream>using namespace std;void change(char **a) {(*a)++;}int main() {char b[] = "abc";char *c = b;change(&c);cout << c << endl;getchar();return 0;}
?
输出为bc, 说明在change函数中,参数为字符串指针的地址,此时,指针移动的影响,将会对原来的指针产生影响。在线程中使用也是同样的道理,只不过参数需要进行强制转换,如下:
#include <iostream>#include <windows.h>using namespace std;DWORD WINAPI threadFunc(PVOID pvParam) {cout << "hello " << (*((char *) pvParam))++ << endl;return 0;}int main() {char b[] = "abc";char *c = b;HANDLE handle = CreateThread(NULL, 0, threadFunc, (PVOID) &c, 0, NULL);WaitForSingleObject(handle, INFINITE);cout << c << endl;getchar();return 0;}
?
输出同样为 ?bc 。
?
下面传递 指针
#include <iostream>using namespace std;void change(char *a) {a++;}int main() {char b[] = "abc";char *c = b;change(c);cout << c << endl;getchar();return 0;}
?
输出为abc
在change函数中,进行指针+1 操作,不影响原来的指针位置。
?
可以理解为,此处进行的是指针的拷贝,修改指针(修改指针位置),不能影响原来指针的位置。
但是如果是修改指针所对应的值,那么是会影响原来的值。
#include <iostream>using namespace std;void change(char *a) {(*a)++;}int main() {char b[] = "abc";char *c = b;change(c);cout << c << endl;getchar();return 0;}
?
输出 bbc
?
个人认为,这些操作是非常值得注意,也是理解较为困难的地方。平常使用时应注意。
?