c - 更改函数内指针的值
问题描述
我想将指针的值更改为指向函数内部的不同地址。
我知道我需要一个指向指针的指针来执行此操作,但我犯了一个拼写错误并使用char *
而不是,char **
我得到了下面的结果。
在函数中传递指针的地址,指针变成指向指针地址的指针。
因此,如果我取消引用指针,我将能够更改它指向的值,在这种情况下是 (value of) pointer 。
我知道我无法访问指向的数据(我需要一个论据)。ptr1
func
p
*p
ptr1
ptr1
char ** p
但是,如果我唯一的意图是更改ptr1
指向的地址,那在 C 中可以接受吗?
#include <stdio.h>
char array1[10] = {'1','2','3','4','5','6','7',};
char array2[10] = {'A','B','C','D','E','F','G',};
void func(char * p)
{
printf("func is called\n");
*p = array2;
}
int main(void)
{
char * ptr1 = NULL;
ptr1 = array1;
printf("ptr1 = %s\n", ptr1);
func(&ptr1);
printf("ptr1 = %s\n", ptr1);
return 0;
}
这是我得到的结果。
ptr1 = 1234567
func is called
ptr1 = ABCDEFG
解决方案
您的代码是错误的,并且您(不)幸运地使用错误的代码获得了所需的输出。
该函数func
仅根据传递的指针修改一个字节,因为指针是char*
.
看来您正在使用 little-endian 环境,并且第一个元素的地址array1
和array2
除了最低字节之外碰巧相同,因此ptr1
修改后的值恰好通过仅修改一个字节来正确。
尝试更换
char array1[10] = {'1','2','3','4','5','6','7',};
char array2[10] = {'A','B','C','D','E','F','G',};
和
char array1[256] = {'1','2','3','4','5','6','7',};
char array2[256] = {'A','B','C','D','E','F','G',};
(改变数组元素的数量)你可能会得到另一个结果。如果您未能获得其他结果,请尝试其他尺寸。
推荐阅读
- c - 已分配但无法释放的内存 C
- c# - Visual Studio Code:添加新的 Windows 窗体
- kotlin - 简化嵌套的 Mono
> 表达式科特林 - python-3.x - Flask WTForm 验证提交但不更新数据库
- python - 如何在 Python 中将创建的文件复制到网络驱动器?
- python - 带拆分的多个背包
- cordova - Cordova window.resolveLocalFileSystemURL 仅在第三次调用后触发回调
- r - Rgl 包 3D 散点图从轴中删除科学记数法
- angular - 使用 Angular 异步管道订阅 Observable
- xpages - XPages:回调在 dynamicContent 控件中不起作用