关于指针之前在初阶中有过介绍,这次在其基础上进一步加深对指针的理解,关于指针的基本概念就不再进行介绍,可以去看我之前的指针初阶的博客,指针初阶博客链接C语言指针(初阶)_鹰不泊wyk的博客-CSDN博客
目录
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)是因为程序数组时便是这样处理的
指针进阶内容就先到这,后续进阶内容会陆续更新
完