字符串指针的地址的传递
#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
个人认为,这些操作是非常值得注意,也是理解较为困难的地方。平常使用时应注意。