【C】指针详解上篇@指针进阶 —— 字符指针 | 数组指针 | 指针数组 | 数组传参和指针传参

简介: 字符指针 | 数组指针 | 指针数组 | 数组传参和指针传参

@TOC
引:
反爬链接

在指针的初阶已接触过指针的概念,并介绍了如下内容

1.指针是个变量,用来存放地址,地址唯一标识一块内存空间,所以地址也形象的被称作指针。
2.指针大小是固定的4/8字节(32位平台/64位平台)。
3.指针是有类型的,类型决定被看待的视角,即决定了 指针 +- 整数 跳过的步长;指针解引用 时的访问权限。
4.指针的运算:指针 +- 整数;指针 - 指针;指针大小比较。

有关这部分内容还有好多细节,我还没写文章,为了使内容连贯后期会考虑补一篇。
这篇文章,将探讨有关指针的高级主题。

正文开始@一个人的乐队

1.字符指针

字符指针有下面两种使用场景:
1.指向字符在这里插入图片描述

2.指向字符串
在这里插入图片描述
那么就有这样一道面试题
小伙伴们先来自己做做做看呐。

#include <stdio.h>

int main()
{
    char str1[] = "hello Asi.";
    char str2[] = "hello Asi.";
    char *str3 = "hello Asi.";
    char *str4 = "hello Asi.";
    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;
}

解析:
在这里插入图片描述

2.指针数组

指针数组即,==存放指针的数组==。

写几段代码,感受一下它的使用:
代码1:
在这里插入图片描述
代码2:
在这里插入图片描述

代码3:
在这里插入图片描述
这里 指针+-整数 的等价思想还是比较有用的。

3.数组指针

数组指针是什么?指针还是数组?
答案是:指针。其实做一个类比就好。
先做一个小小的知识铺垫,其实本来也是该包含在初阶内容之中滴。
arr与&arr的区别
在这里插入图片描述

定义类比:
在这里插入图片描述
这里既然知道了数组指针的概念,就做一道小练习:
问:p的类型应该怎么写?

#include <stdio.h>

int main()
{
    int* arr[10] = { 0 };
    //p = &arr;
    //问:p的类型应该怎么写?
    return 0;
}

解析:
在这里插入图片描述

数组指针的使用

数组指针用对还是蛮好用的,但用错了那是非常别扭。
错误示范:

在这里插入图片描述
那数组指针到底是怎样访问到每个元素的呢?
在这里插入图片描述下面就来看数组指针在二维数组中怎样使用:在这里插入图片描述
介绍了数组指针和指针数组的,我们一起来看看下面代码是什么意思:

int arr[5];
int *parr1[10];
int (*parr2)[10];
int (*parr3[10])[5];

解析:
在这里插入图片描述

4.数组传参和指针传参

写代码的时候难免要把【数组】或【指针】传给函数,那函数的参数如何设计呢?
4.1 一维数组传参
在这里插入图片描述

4.2 二维数组传参
在这里插入图片描述
4.3 一级指针传参
在这里插入图片描述

反向思考:当 函数参数 部分是一级指针时候,函数能接收什么参数?

在这里插入图片描述
4.4 二级指针传参
在这里插入图片描述

反向思考:当 函数参数 部分是二级指针时候,函数能接收什么参数?

在这里插入图片描述
未完待续

中篇将介绍:点击直达指针语法中篇@指针进阶 | 函数指针 | 函数指针数组 | 指向函数指针数组的指针

  • 函数指针

    • 函数指针数组
    • 指向函数指针数组的指针,

下篇将介绍:

回调函数
相关文章
|
2月前
使用指针访问数组元素
【10月更文挑战第30天】使用指针访问数组元素。
41 3
|
2月前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
2月前
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
2月前
|
容器
在使用指针数组进行动态内存分配时,如何避免内存泄漏
在使用指针数组进行动态内存分配时,避免内存泄漏的关键在于确保每个分配的内存块都能被正确释放。具体做法包括:1. 分配后立即检查是否成功;2. 使用完成后及时释放内存;3. 避免重复释放同一内存地址;4. 尽量使用智能指针或容器类管理内存。
|
2月前
|
存储 NoSQL 编译器
C 语言中指针数组与数组指针的辨析与应用
在C语言中,指针数组和数组指针是两个容易混淆但用途不同的概念。指针数组是一个数组,其元素是指针类型;而数组指针是指向数组的指针。两者在声明、使用及内存布局上各有特点,正确理解它们有助于更高效地编程。
|
2月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
61 4
|
2月前
使用指针访问数组元素
【10月更文挑战第31天】使用指针访问数组元素。
53 2
|
2月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
163 13
|
3月前
|
C语言
无头链表二级指针方式实现(C语言描述)
本文介绍了如何在C语言中使用二级指针实现无头链表,并提供了创建节点、插入、删除、查找、销毁链表等操作的函数实现,以及一个示例程序来演示这些操作。
41 0
|
4月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
160 4