`

字符串指针的地址的传递

 
阅读更多

字符串指针的地址的传递

 

#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

 

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

 

分享到:
评论

相关推荐

    C语言字符串指针(指向字符串的指针)_C语言中文网1

    字符串指针可以用来遍历字符串,也可以作为函数参数传递,这使得字符串处理更加灵活。 7. **指针和数组的区别** 虽然在某些情况下,数组名可以转换为指向其首元素的指针,但数组和指针并不完全等价。数组是一个...

    易语言指针操作字符串和数组

    字符串指针的声明通常以`*`符号表示,例如`*字符串指针`。 - 使用`取指针内容`操作可以获取指针所指向的字符串内容,而`设指针内容`可以修改指针指向的字符串。 3. **操作字符串**: - 指针可以用来遍历字符串,...

    C语言教程课件Ch10-4字符串指针.ppt

    2. 函数参数传递:可以定义一个函数`copy_string`,接受两个字符串指针作为参数,内部实现字符串复制。这样可以在不同的上下文中复用代码,提高程序的模块化。 三、函数调用实现字符串复制 通过函数调用实现字符串...

    C#将字符串数组传递给C++ DLL.rar

    本主题聚焦于如何在C#应用中有效地传递字符串数组给C++ DLL,特别是使用MFC(Microsoft Foundation Classes)库的情况。在Visual Studio 2010环境下,开发者经常需要解决这个问题,以便实现不同语言和库之间的无缝...

    将字符串传递到 DLL 过程

    当一个DLL过程需要LPSTR类型时,你可以直接以ByVal方式传递VB的String类型,因为BSTR的指针指向的是字符串的第一个字符,这与LPSTR的行为相似。例如,`sndPlaySound`函数接受一个字符串参数,它会被解释为一个LPSTR...

    03 C#与C++dll互相传递字符串.rar

    而在C#中,`Marshal.PtrToStringAnsi`用于从C++返回的指针创建一个字符串。 5. **内存管理**: C++的`getGreeting`函数返回了一个动态分配的内存块,因此在C#中调用后,我们需要使用`Marshal.FreeHGlobal`来释放这...

    C语言字符串与指针

    另一个重要知识点是字符串指针作为函数参数的使用。在C语言中,函数可以使用指针来操作字符串,这允许函数修改字符串的内容,并将修改后的字符串返回给调用者。这种机制是通过使用地址传递实现的,函数参数可以是...

    C语言第讲指针与字符串字符数组PPT课件.pptx

    2. **字符串指针作为函数参数** 在C语言中,函数参数传递时,字符串通常通过字符指针传递。例如,函数`cpystr()`接收两个字符指针,其中一个用于接收复制后的字符串。通过字符指针,可以实现字符串的拷贝,如`...

    如何将字符串传递给函数

    1. **操作字符串**:当需要对字符串进行修改时,如字符串拼接、替换等操作,使用指针传递可以使函数直接修改原字符串。 2. **返回多个值**:如果一个函数需要返回多个结果,可以使用指针参数来实现。例如,一个函数...

    C语言实现字符串截取

    5. **返回结果**:返回复制后的子字符串指针。 ### 函数二:`subStringByPointer` #### 功能描述 `subStringByPointer` 函数通过指定起始字符指针(`begin`)和结束字符指针(`end`)来截取字符串。与 `...

    程序设计-通过指针引用字符串.pptx

    在上面的例子中,`str_len`函数将字符串指针作为参数传递,计算字符串的长度,然后将结果返回给主调函数。 3. 字符指针变量和字符数组的比较 字符指针变量和字符数组是两个不同的概念。字符数组是一种静态存储方式...

    指针_字符串-指针_字符串

    指针是一个变量,它存储的是另一个变量的内存地址,而字符串则是由字符序列组成的特殊数据类型。接下来,我们将深入探讨这两个主题。 首先,我们来看数组。数组是一种数据结构,它允许我们在内存中存储相同类型的...

    c++ 与c#的中文字符串传递演示demo

    本文将深入探讨如何在C++和C#之间传递中文字符串,并实现回调功能。首先,我们要明白C++和C#之间的互操作性主要依赖于.NET框架的P/Invoke(Platform Invoke)机制。 1. **C++ 编译为 DLL** C++编写的代码可以通过...

    C语言程序设计数组字符串指针PPT课件.pptx

    【C语言程序设计中的数组、字符串和指针】 在C语言程序设计中,数组是一种重要的数据结构,它允许我们存储一组相同类型的数据。数组的概念在编程中起着基础性的作用,尤其是在处理大量数据时,它提供了高效且方便的...

    第8章 指针-5向函数传递字符串1

    当我们将字符串作为参数传递给函数时,由于字符串以空字符`\0`结束,我们通常传递的是字符串的首地址,而不是整个字符串的副本,这样可以节省内存。 下面展示了计算字符串长度的两个实现,一个使用字符数组,另一个...

    通过指针传递两个字符串

    抱歉,这个资源已过时 !

    java与c交互传递字符串和整型

    3. **字符串数组传递**:与单个字符串类似,字符串数组也需要转换为C的字符指针数组。`NewObjectArray`用于创建一个新的对象数组,`GetObjectArrayElement`获取数组中的元素,然后将每个元素转换为C字符串。处理完毕...

    [大学生考试专用C语言教学课件]第10章 字符串.pptx

    C语言字符串处理 ... 这里返回的字符串指针是指向动态存储区中的字符串的,可以被修改。 C语言中字符串处理是非常重要的,需要正确地使用字符数组和字符指针,区分不同的存储区,并正确地操作字符串。

    指针与字符串.rar

    可以使用字符串指针来比较两个字符串是否相等,或者使用strcmp()函数进行比较。 4. **数字字符统计**:这可能是一个统计输入字符串中数字字符数量的问题。通过遍历字符串,可以使用指针逐个访问字符,检查其是否为...

    C语言:数组、指针与字符串(简易入门、精髓)

    在C语言中,数组、指针和字符串是基础且重要的概念,它们构成了C语言的核心特性。数组是一系列相同类型变量的集合,可以是一维、二维或多维的。数组的声明通常采用`类型名 数组名[常量表达式]`的形式,例如`int a[10...

Global site tag (gtag.js) - Google Analytics