💘作者:你我皆为凡人
💘博客主页:你我皆为凡人的博客
💘名言警句:时间不会为任何人停留,而事物与人,无时不刻也在变化着。每一个人,也都在不停向前!
💘觉得博主文章写的不错的话,希望大家三连(✌关注,✌点赞,✌评论),多多支持一下!!
💘系列作品:
💘
文章目录
目录
前言
本文讲解了指针的进阶中的字符指针,数组指针,指针数组,数组传参和指针传参等一系列的知识,图文并茂,让你可以看懂并且理解
提示:以下是本篇文章正文内容,下面案例可供参考
💫字符指针
我们在之前的学习过程中已经了解到了初阶指针的一些知识,知道了指针的概念:
1. 指针就是个变量,用来存放地址,地址唯一标识一块内存空间。2. 指针的大小是固定的4/8个字节(32位平台/64位平台)。3. 指针是有类型,指针的类型决定了指针的+-整数的步长,指针解引用操作的时候的权限。4. 指针的运算。接下来我们继续探讨指针的高级主题在指针的类型中我们知道有一种指针类型为字符指针char*如下:
int main()
{
char ch = 'w';
char* pc = &ch;
*pc = 'b';
printf("%c\n", ch);
return 0;
}
像上面这种是把一个字符放入到指针中,大家还见过另外一种
如下:
下面是把abcdef这个字符串的首元素a的地址赋值到了p中,而不是整个字符串都给了p,而首元素地址打印,就顺便把后面一串都打印出来了
int main()
{
char* p = "abcdef";
//把字符串首元素a的地址地址赋值到p中
printf("%s\n", p);
return 0;
}
接下来让大家看一道面试题来解解乏,顺便理解理解上面所讲:
int main()
{
const char* p1 = "abcdef";
const char* p2 = "abcdef";
char arr1[] = "abcdef";
char arr2[] = "abcdef";
if (p1 == p2)
printf("p1==p2\n");
else
printf("p1!=p2\n");
if (arr1 == arr2)
printf("arr1 == arr2\n");
else
printf("arr1 != arr2\n");
return 0;
}
为什么会是这样的结果呢?
p1与p2都是字符指针,而且const修饰无法改变指针,而“abcdef”是常量字符串,把首元素地址a给了p1与p2,既然是常量字符串,无法修改,只能读,在内存中存放多份好像没什么用,所以就有一块儿空间,而p1与p2指向的其实是相同的空间,所以打印相等
arr1是一个数组,而初始化会开辟一块儿空间,arr2也是一个数组,初始化开辟领一块儿空间,所以arr1与arr2并不相等
💫指针数组
指针数组是数组,是用来存放指针的数组
int main()
{
int arr[10]; //整型数组,存放整形的
char arr1[10];//字符数组,存放字符的
int* arr2[10];//整形指针数组,存放整形指针的
char*