指针详解(1) -字符串指针、指针数组与数组指针

本文详细介绍了C语言中的指针高级用法,包括字符串指针的概念及其工作原理,指针数组的定义与应用,以及数组指针的创建和使用,特别是对二维数组的处理。通过实例解析,帮助读者深入理解这些概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在初级阶段的《指针》章节,我们知道了指针基本概念:

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

接下来,我们继续探讨指针的高级使用


一、字符串指针

(1)例1

int main()
{
   
	char* p = "hello world";
	//*p = 'w';//这种写法是错的,不可通过*p更改
	//const char* p = "hello world";
	printf("%s\n", p);
	return 0;
}

代码 char* p = “hello world”; 本质是把字符串 hello 首字符的地址放到了p中。打印时通过p找到h的地址,打印出h,并依次打印hello world等字符,直到遇到\0停止打印。

在这里插入图片描述

(2)例2

#include <stdio.h>
int main()
{
   
	char str1[] = "abcdef";
	char str2[] = "abcdef";
	char* str3 = "abcdef";
	char* str4 = "abcdef";
	//情况1
	if (str1 == str2)
		printf("hehe\n");
	else
		printf("haha\n");
	//情况2
	if (str3 == str4)
		printf("hehe\n");
	else
		printf("haha\n");

	return 0;
}

情况1打印结果为haha
情况2打印结果为hehe
这是因为str3和str4指向的是一个同一个常量字符串,是不可更改的,开辟两个空间浪费资源。所以C/C++会把多个个指针指向的同一个字符串存储到单独的一个内存区域。但是用相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块。所以str1和str2不同,str3和str4不同。

二、指针数组

通过前面的学习,我们可以知道形如int arr1[5] = {0};的是整形数组,数组存放的是整形,形如char arr2[10] = {0};的是字符数组,数组存放的是字符。同理,指针数组应该是数组,数组存放的是指针。

	//指针数组 - 数组 - 存放指针的数组
	int* arr[4];//存放整形指针的数组 - 指针数组
	char* ch[5];//存放字符指针的数组 - 指针数组
//指针数组的简单使用
int main()
{
   
	int a = 10;
	int b = 20;
	int c = 30;
	int d = 40
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值