指针知多少(指针进阶:壹)

关于指针之前在初阶中有过介绍,这次在其基础上进一步加深对指针的理解,关于指针的基本概念就不再进行介绍,可以去看我之前的指针初阶的博客,指针初阶博客链接C语言指针(初阶)_鹰不泊wyk的博客-CSDN博客

目录

1.字符指针

1.1接收字符串

1.2字符指针注意事项

2.指针数组

2.1指针数组的创建

2.2指针数组的输出


1.字符指针

1.1接收字符串

字符指针除了可以用于接收字符外,它还可以用来接收字符串,具体操作如下:

char*p="mark";

p中存储的是首字母m的地址,和存储字符地址不同的是,字符串是存放在内存中的只读数据区的,即使解引用p也无法对字符串进行修改

在部分编译器中,char*p="mark"这种写法会报错,我们需要在“*”左边加上const进行修饰

const在“*”左边,修饰的是*p,即指针指向的内容无法被修改

const在“*”右边,修饰的是p,即指针变量存储的地址无法被修改

关于字符指针还有几个细节需注意

1.2字符指针注意事项

1.

首先看下面的代码:

char arr1[]="mark";
char arr2[]="mark";


char*p1="mark";
char*p2="mark";

上述代码中,arr1和arr2不相等,p1和p2相等

原因如下:

数组arr1和arr2虽然内容相同,但二者都在内存上开辟了空间,二者的地址并不相同;

而指针p1和p2,由于字符串内容无法被修改,所以只需在内存中开辟一块空间即可,p1和p2存储的地址是相同的

2.

在创建其它变量的时候可以连续创建多个变量,如下:

int a,b,c;

在指针中上述写法便是错误的

int *pa,pb;
//pa的类型是指针,pb的类型是int

 正确写法:

int *pa,*pb


typedef int*  pt;
pt pa,pb;

2.指针数组

指针数组本质上是数组,数组中的元素是指针,按照数组的定义,数组是一组相同类型的元素的集合,指针只要指向的数据的类型相同,那么就可以放到数组中

2.1指针数组的创建

我们可以回想一下其他类型的数组是如何创建的,比如int,int arr[10]={0},那么指针数组同理

int arr1[]={1,2,3};
int arr2[]={2,3,4};
int arr3[]={3,4,5};
int*p1=arr1;
int*p2=arr2;
int*p3=arr3;
int* a1[]={p1,p2,p3};

2.2指针数组的输出

数组a1存放的是各数组的首地址,所以a1[i]就能访问各数组的首元素,访问后面的元素*(a1[i]+j)即可

如果觉得复杂,a1[i][j]也可以输出

 

之所以先写 *(a1[i]+j)是因为程序数组时便是这样处理的

指针进阶内容就先到这,后续进阶内容会陆续更新

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星鸦wyk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值