对各种指针,数组的联立回顾复习(字符指针,指针数组,数组指针,函数指针,函数指针数组)
对于指针与数组的联立,如今笔者到此将近讲解完毕,所以笔者打算来一篇回顾复习一下!!一来满足笔者复习回顾的愿望,又能给读者提供一些便利!!何乐而不为??
字符指针!指针数组!!数组指针!!!函数指针!!!!函数指针数组!!!!!总结性回顾!
1.首先来简单回顾一下字符指针!
int main()
{
//char * 类型
char ch = 'w';
char* pc = &ch;
char* ps = "abcdef";
//准确的写法为:
const char* ps = "abcdef";
}
对于字符 char类型,因此,字符指针为:char * 类型!
对于:char* ps = "abcdef"; 准确的写法为: const char* ps = "abcdef"; const修饰指针,放在*左边,限制的为:*ps; 表示ps所指向的对象*ps不能被修改!!而对于:"abcdef"是一个字符串,该"abcdef"字符串的值为:a的地址,存放在指针变量里面(char *);
下面请看笔者的完整代码:
#include <stdio.h>
int main()
{
//char * 类型
char ch = 'w';
char* pc = &ch;
//char* ps = "abcdef";
//准确的写法为:
const char* ps = "abcdef";
printf("%s\n", ps);
printf("%c\n", *ps); //这个是对字符串的值是a的地址的最好证明!
return 0;
}
代码的运行结构为:
思考一下:字符指针的训练:
int main()
{
char str1[] = "abcdef";
char str2[] = "abcdef";
const char* str3 = "abcdef";
const char* str4 = "abcdef";
if (str1 == str2)
printf("str1 == str2\n");
else
printf("str1 != str2\n");
if (str3 == str4)
printf("str3 == str4\n");
else
printf("str3 != str4\n");
return 0;
}
请大家思考一下!!然后自行在vs里面寻找答案!在此,笔者就不做更多的讲解!
2.笔者来带领大家简单回顾一下 :指针数组!
概念:指针数组本质上是数组,存放指针的数组;
📌 注意:不要和数组指针混淆,数组指针本质上是指针;
对于指针数组,到目前为止:想必读者的第一想法,一定将是:存放数组的指针!!
对于指针,我们有着:
char *
int *
char **
对于上述的指针,读者也能自己想起来!!相信读者实力强强!!
请看笔者的简单使用:
int main()
{
char* arr[4];
//存放字符型指针的数组
int* arr2[8];
//存放整型指针的数组
return 0;
}
分析下面的数组:
int arr1[5];
char arr2[6];
int* arr3[5];
🔑 解析:
① arr1 是一个整型数组,有 5 个元素,每个元素都是一个 整型;
② arr2 是一个字符数组,有 6 个元素,每个元素都是一个 char 型;
③ arr3 是一个整型指针数组,有 5 个元素,每个元素是一个 整型指针;
指针数组的用法:
#include <stdio.h>
int main()
{
int arr1[] = {1, 2, 3, 4, 5};
int arr2[] = {2, 3, 4, 5, 6};
int arr3[] = {3, 4, 5, 6, 7};
int* p[] = { arr1, arr2, arr3 }; // 首元素地址
int i = 0;
for(i=0; i<3; i++) {
int j = 0;
for(j=0; j<5; j++) {
printf("%d ", *(p[i] + j)); // j-> 首元素+0,首元素+1,+2...
// == p[i][j]
}
printf("\n");
}
return 0;
}
代码的运行结果为:
- 点赞
- 收藏
- 关注作者
评论(0)