对各种指针,数组的联立回顾复习(字符指针,指针数组,数组指针,函数指针,函数指针数组)

举报
念君思宁 发表于 2023/02/14 21:44:52 2023/02/14
【摘要】 对各种指针,数组的联立回顾复习(字符指针,指针数组,数组指针,函数指针,函数指针数组)

对于指针与数组的联立,如今笔者到此将近讲解完毕,所以笔者打算来一篇回顾复习一下!!一来满足笔者复习回顾的愿望,又能给读者提供一些便利!!何乐而不为??

字符指针!指针数组!!数组指针!!!函数指针!!!!函数指针数组!!!!!总结性回顾!

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;
}

 代码的运行结果为:


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。