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

指针进阶(一)——字符指针

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

指针进阶(一)——字符指针

回顾初阶指针内容:

指针的概念:

  1. 指针就是个变量,用来存放地址,地址唯一标识一块内存空间。
  2. 指针的大小是固定的4/8个字节(32位平台/64位平台)。
  3. 指针是有类型的,指针的类型决定了指针±整数的步长,指针解引用的时候的权限。
  4. 指针的运算。
1、字符指针

在指针的类型中我们知道有一种指针类型为字符指针char*;
一般使用:

#include 
int main()
{
	char ch = 'w';
	char* pc = &ch;//*pc可以访问到ch里面
	printf("%cn", *pc);//这里*pc打印结果应为'w'

	*pc = 'b';//这里利用*pc改变了ch中的值
	printf("%cn", *pc);//打印结果应为'b'
	
	return 0;
}

还有一种使用方法:

int main()
{
	const char* pstr = "hello world";//这里是把一个字符串放到pstr指针变量里了吗?
	printf("%sn", pstr);
	return 0;
}

代码const char* pstr = "hello world";很容易让我们以为是把字符串hello world 放到字符指针pstr里了,但是本质是把字符串hello world首字符的地址放到了pstr中。

上面代码的意思是把一个常量字符串的首字符h的地址存放到指针变量pstr中。
小技巧:

#include 
int main()
{
	char* pstr = "hello world";//这里是把一个字符串放到pstr指针变量里了吗?
	*pstr = 'w';
	printf("%sn", pstr);
	return 0;
}

当我们像上面这样修改*pstr时,编译器不会报错,但是会崩溃,打印不出结果,所以我们在char*前面加上const用来保护*pstr不被改变,这样就提高了代码的安全性。

那就可能有这样的面试题:
请判断下面str1 and str2;str3 and str4的关系

#include 
int main()
{
	char str1[] = "hello world";
	char str2[] = "hello world";
	const char* str3 = "hello world";
	const char* str4 = "hello world";
	if (str1 == str2)
		printf("str1 and str2 are samen");
	else
		printf("str1 and atr2 are not samen");
	if (str3 == str4)
		printf("str3 and str4 are samen");
	else
		printf("str3 and str4 are not samen");

	return 0;
}

输出结果为:

这里的str3和str4指向的是同一个常量字符串。C/C++会把常量字符串存储到单独的一个内存区域,当几个指针指向同一个字符串时,他们实际会指向同一个内存。但是用相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块,所以str1和str2不同,str3和str4相同。

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

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

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