栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c语言指针详解

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c语言指针详解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

c语言指针的函数间字符数组传递详解

–近期开始学习c语言,到了指针这一块在看视频时总觉得听懂了,但是一用就错,尤其是在不同函数中的调用,经过了一早上的总结和代码练习终于弄懂了指针的使用方法,发个文章来记录一下,不废话,直接上代码

一、指针是什么?

一句话总结:指针就是指向你数据在内存空间中存放的那个地址。

二、使用步骤

错误代码如下(示例):

i#include
#include

void strCopy(char* tk, char c[])
{
//直接赋值
tk = c;
}

int main()
{
char* cp;
char c[6] = “hello”;
char c2[6] = “world”;
cp = c;
printf(“cp= %s n”, cp);
strCopy(cp, c2);
printf(“cp=%s”, cp);
return 0;
}
//上面这段代码是用java的编程方式在不同函数中去操作变量,不用关心变量的地址,并没有明白指针作用;
c语言函数
一下从内存中来看吧:

为了方便展示地址值,子函数和主函数的参数名称就不写成相同的了;可以发现,虽然函数strCopy2中的参数tk和sonC的值分别由主函数cp和c2传递的,但是他们在函数strCopy2的地址值和主函数的地址值是完全不一样的两个地址,由此可见:“c语言中参数在不同的函数中只负责值的传递”(重点);此时在函数strCopy2相当于两个新的指针tk和sonC (“重点:字符数组就是一个指针”)指向了主函数中cp和c2指向的地址。
当给tk赋值时,指针c2指向的地址赋值给函数strCopy2中的新指针tk,原主函数指针cp中指向的值并没有发生改变,所以结果如图:

此时依然输出"hello",并且函数strCopy2执行完指针tk和sonC已被释放

如何在子函数中修改主函数中字符串的值:
代码如下:
void strCopy2(char* tk, char sonC[])
{
for (int i = 0; i < strlen(sonC); i++)
{
tk[i] = sonC[i];
}
}
int main()
{
char* cp;
char c[6] = “hello”;
char c2[6] = “world”;
cp = c;
printf(“cp= %s n”, cp);
strCopy2(cp, c2);
printf(“cp=%s n”, cp);
printf(“c=%s”, c);
return 0;
}
内存变化如下:
i == 0时
i == 1时

i == 2时

指针tk指向的“地址“所在的值已经被改变;

最后输出:

发现字符数组c和字符指针cp的值已经都被改变了;

废话总结:在c语言中假设有一个变量 c ,她的值为 1 ,她的地址为 0x0000001(随便乱写一个)
在内存中表现为0x0000001{1};当要改变她的值为2时,会变成0x0000001{2};
现在创建一个指针指向int *p = c; 假设指针p的值为0x00001AE0;那么当这个指针指向c时,在内存中的地址表现为:0x00001AE0{0x0000001{2}};
所以,当你想要去改变指针p或者变量c的值时;实际上变量和指针的地址不发生改变(地址发生改变就成了一个新的变量,只是改变这个地址存放的值罢了);

总结

指针的使用:在平时编写代码中对变量地址并不太关注的语言比如java和py,想要使用了解指针:
一句废话总结:不同函数只传递值,不传递地址,“地址不变,值改变,原变量值改变”,“地址改变值改变,原变量值不变,新地址相当于一个新的变量”。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1018053.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号