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

2.1 指针使用

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

2.1 指针使用

1 指针的的概念

        1.指针也是一种变量,占有内存控件,用来保存内存地址

        2.*p操作内存

                *p相当于通过地址(p变量的值)找到一块内存;然后操作内存

                *p放在等号左边相当于给p所指向的内存空间复制。

                *p放在等号右边相当于从p所指向的内存空间获取值。

        3.指针变量和它指向的内存块是两个不同的概念

char* getStr1()
{
	char* p = NULL;
	p = (char*)"1234";
	return p;
}

int main()
{
	char* p = getStr1();
	*(p + 2) = 's';//错误写法。由于"1234"存放在常量区,常量区的数据不能被修改
	
	printf("%sn",p);
	system("pause");
	return 0;

        4.指针也是一种数据类型,它的数据类型取决于它所指向的内存空间的数据类型。

                注:指针的数据类型决定了指针的步长(p++) 

        5.野指针产生的原因

                指针变量和它所指向的内存空间变量是两个不同的概念,使用free(p)释放指针p所指向的内存空间的时候,没有将指针变量本身置为NULL。

                解决办法:在释放指针所指向的内存空间的时候同时将指针变量置空                

	char* p = NULL;
	p = (char*)malloc(100);
	strcpy(p, "123456");
	printf("%sn", p);
	if (p != NULL)
	{
		free(p);
		p = NULL;//释放指针所指向的内存空间的同时将指针置为空

	}
        2.从一级指针到二级指针

                二级指针的内存空间中保存的是一级指针的地址。二级指针的数据类型与其指向的一级指针的数据类型保持一致。可以通过二级指针来间接改变一级指针的指向。

void getMom(char **p1)
{
*p1 = (char*)400;

}
void main()
{
	char* p = NULL;
	char** p1 = NULL;
	p =(char*)0x123;
	p1 =(char**) 0x234;
	printf(" p=%dn", p);

	p1 = &p;//二级指针指向一级指针,p1中保存的是p的地址
	printf("*p1=%dn", *p1);

	*p1 = (char*)456;//通过p1间接修改p的指向
	printf("p=%dn", p);//456

	getMom(&p);//函数调用  需要传递一级指针的地址
	printf("p=%dn", p);//400
	system("pause");
}

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

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

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