C语言中的字符指针-创新互联

目录
  • 1.字符指针指向一个字符
  • 2.字符指针指向一个字符串
  • 3.例题

在左云等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站制作、成都做网站 网站设计制作按需设计,公司网站建设,企业网站建设,成都品牌网站建设,全网营销推广,成都外贸网站建设,左云网站建设费用合理。1.字符指针指向一个字符
int main()
{char ch = 'w';
  char *pc = &ch;
  return 0;
}

将一个char类型的变量的地址放到一个char*类型的指针里去,这里的char*ps就是字符指针
在这里的字符指针与之前的整形指针等的用法基本相同,不多做介绍


2.字符指针指向一个字符串

字符指针不但可以指向一个字符,并且还可以指向一个字符串
如下代码:

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

接下来我们可以分析:

  • "abcdef"是一个字符串,它占7个字节空间(因为后面还有一个看不见的\0),而pstr只是一个指针类型,它只有4或8个字节大小,7个字节大小的内容是不可能放zh到4个字节大小的指针中的。
  • 所以char* pstr = "abcdef"的意思压根就不是把abcedf放到pstr里去

这里实际上是把字符串"abcdef"首字符a的地址放到pstr里去
如下图:
在这里插入图片描述
接下来,我们可以使用字符指针,对字符串进行输出,因为输出的字符串,需要写%s类型,并且pstr里存的已经是字符串的首字符的地址了,所以可以直接输出字符串,代码如下:

int main()
{char* pstr = "abcdef";
	printf("%s\n", pstr);
	return 0;
}

输出结果:
在这里插入图片描述

因为pstr的类型是字符指针,可以存放单独的字符,可以对单独字符进行操作,所以可以通过指向字符串的字符指针对字符串内任一个字符进行操作,这里可以使用指针与int类型的加减实现

int main()
{char* pstr = "abcdef";
	printf("%c\n", *pstr); //这里pstr里存放的就是a的地址,直接解引用输出就是a
	printf("%c\n", *(pstr + 1));//这里指针加1,使指针指向下一个字符b,再解引用,输出b
	return 0;
}

输出结果:
在这里插入图片描述
这里的指向字符串的字符指针实际上与数组有些类似,还可以使用数组的形式取出字符

int main()
{char* pstr = "abcdef";
	printf("%c\n", pstr[1]);
	return 0;
}

输出结果:
在这里插入图片描述

这里可以看到printf("%c\n", *(pstr + 1))语句与printf("%c\n", pstr[1])的效果一样,都是输出字符串内的第二个字符
可以得出一个结论:
如果a是一个字符串或数组的首元素地址,x是一个整数(大小小于数组或字符串长度减1),*(a+x)a[x]是等价的

这里的代码其实不够标准:
因为是将常量字符串直接存到字符指针中,常量字符串是不能被修改的,如果后面有代码通过字符指针修改常量字符串,则程序会崩溃
所以最好是写成这样:const char* pstr ="abcdef"


3.例题
//输出结果是什么?
#includeint 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 same\n");
  else
	printf("str1 and str2 are not same\n");
  
  if(str3 ==str4)
	printf("str3 and str4 are same\n");
  else
	printf("str3 and str4 are not same\n");
  
  return 0;
}
  • 在进行char str1[] = "hello world."char str2[] = "hello world."两句时,会建立两个相互独立的空间,数组名表示数组首元素地址,所以str1!=str2

  • 在这里插入图片描述

  • 在进行const char *str3 = "hello world."和·const char *str4 = "hello world.",因为"hello world."是常量字符串,常量字符串是不可以被修改的,所以没有必要在内存中存两分,所以str3==str4

  • 在这里插入图片描述


你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前名称:C语言中的字符指针-创新互联
文章分享:http://azwzsj.com/article/dhccco.html