
前言
大家好我是程序猿爱打拳,我们在学习完指针的基本概念后知道了指针就是地址,我们可以通过这个地址并对它进行解引用从而改变一些数据。但只学习指针的基础是完全不够的,因此学习完指针的基础后我们可以学习关于指针的进阶,其中包括指针数组、数组指针、函数指针等。这篇文章的末尾也有模拟实现计算器源码及讲解。
目录
1.字符指针
经过学习指针的基础后,我们知道了有一种指针类型为字符指针char*。一般这样写代码:
#include<stdio.h>
int main()
{
char ch = 'a';
char *p = &ch;
*p = 'b';
printf("%c\n", ch);
return 0;
}
以上代码最终输出的值为b,对指针p进解引用并赋新值从而改变了ch的值我们不难理解。还有一种写代码方式:
#include<stdio.h>
int main()
{
const char* p = "Hello World";
printf("%s\n", p);
return 0;
}
输出结果:
以上代码,我们把Hello World的首字符地址赋值给了指针p并不是把整个Hello World赋值给了指针p,因此在输出的时候是从H开始依次往后面输出的。当然我们在指针初阶学过以""初始化一个字符串的时候,字符串末尾会默认生成'\0'(结束标识符)。

在理解以上程序后,我们来看一组代码:
#include<stdio.h>
int 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;
}
输出结果:
以上代码,可能有些朋友认为str1不是和str2一模一样吗,为啥输出else后面的结果呢。其实是这样的。
str1和str2没有被const修饰的话是分别在内存中占不同的空间,str3和str4两个字符串都被const修饰了因此占用的空间是一致的。所以str1不等于str2,str3等于str4。

2.指针数组
在指针基础知识中我们学到了指针数组是存放指针的数组。如以下代码:
int* arr1[3];//整型指针的数组
char *arr2[4];//一级字符指针的数组
int **arr3[5];//二级字符指针的数组
我们拿整型指针的数组来举例:
#include<stdio.h>
int main()
{
int arr1[2] = { 1,2 };
int arr2[2] = { 3,4 };
int arr3[2] = { 5,6 };
int* arr4[3] = { arr1,arr2,arr3 };
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
{
printf("%d", arr4[i][j]);
}
}
return 0;
}
输出结果:
以上代码中int *arry4[3]就是一个存放整型指针的数组,它的每一个元素都存放的是一个地址,这些地址分别是arr1,arr2,arr3的数组名也就是第一个元素的地址。通过这些个地址就能依次访问到这个地址及这个地址以后的内容,如通过arr1的地址访问到了1和2。

3.数组指针
数组指针是什么呢,指针还是数组?其实它是指针。我们在指针初阶知道了整型指针可以这样定义:int * p;说了了p指向的是一个整型。浮点型指针可以这样定义:float * p;说明了p指向的是一个单精度浮点型。
3.1&数组名和数组名
我们在数组学习的时候已经知道了数
本文详细介绍了C语言中的指针进阶知识,包括字符指针、指针数组、数组指针、函数指针等概念,以及如何使用它们。通过示例代码解释了数组名和地址的区别,并探讨了一维和二维数组作为参数传递给函数的不同方式。此外,文章还讨论了函数指针和函数指针数组的应用,以及如何利用它们实现一个简单的计算器。



最低0.47元/天 解锁文章
2643

被折叠的 条评论
为什么被折叠?



