首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

字符串指针的地址的传接

2013-11-16 
字符串指针的地址的传递#include iostreamusing namespace stdvoid change(char **a) {(*a)++}int mai

字符串指针的地址的传递
#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

?

个人认为,这些操作是非常值得注意,也是理解较为困难的地方。平常使用时应注意。

?

热点排行