带领大家认识 :指针数组,浅浅分析:数组名与&数组名的区别联系

简介: 带领大家认识 :指针数组,浅浅分析:数组名与&数组名的区别联系

对于刚刚见到指针数组的小白而言,需要知道:指针数组是指针?还是数组??


那么请问:热爱学习的你是个好孩子,你你是好呢?还是孩子呢??


答案显而易见:指针数组是个数组!!


由:整型指针 : int * point ;能够指向整型数据的指针!(存放整型变量的地址)


     浮点型指针: float *pf ;能够指向浮点型数据的指针!(存放字符变量的地址)


那么:数组指针应该是:能够指向数组的指针!(存放数组的地址)


下面笔者用代码来带领大家分析:


 

int a = 10;
  int* p1 = &a;

在上述代码中p1 的类型为:int * ;(去掉名字剩下的就是类型)


因此,对于:

char ch = 'w';
  char p2 = &ch;

在上述代码段中:p2的类型为: char *;(去掉名字剩下的就是类型)


因此对于一个数组:


int arr[10] = { 1,2,3,4,5 };
  int(*pa)[10] = &arr;

由: &arr 取出的是数组的地址,存放到pa中,pa 是数组的指针变量


*pa :指向10个元素为int类型的数组!


因此:


int(*pa)[10] = &arr;
int* p[5];
  int(*p)[5];

为数组指针:


数组指针的类型为:int (*)[10];


即:


是两个不同的指针!请大家分清楚!!!


前者为:指针数组,后者为:数组指针!


数组名与&数组名的区别联系


对于数组名,大家并不陌生!


在笔者下面的内容需要用到:数组名是数组首元素的地址!


有俩个列外需要大家注意:(1)sizeof(数组名) 在这里数组名表示整个数组!


(2)&(数组名) 取出的是整个数组的地址!


希望大家谨记!!!


列如:


int arr[10] = { 0 };
  int(*p)[10] = &arr;

在上述代码段中,&arr 的类型为: int (*)[10] ;是一种指针类型!


数组的地址+1,跳过整个数组的大小!!


言归正传,上面是笔者进行下面代码的基础知识,及其扩展,希望大家认真思考笔者将要进行的内容!


#include <stdio.h>
int main()
{
  int arr[10] = { 0 };
  printf("%p\n", arr);
  printf("%p\n", &arr[0]);
  printf("%p\n", &arr);
  printf("\n");
  printf("%p\n", arr);
  printf("%p\n", arr+1);
  printf("\n");
  printf("%p\n", &arr[0]);
  printf("%p\n", &arr[0]+1);
  printf("\n");
  printf("%p\n", &arr);
  printf("%p\n", &arr+1);
}


在上述代码中,代码的内容显而易见,在此笔者就不做过多的讲述!


需要强调的就是:%p是用来打印地址的!!


下面请看笔者的代码运行结果为:


0a2653c851af460fa595bd959398a8f1.png


根据代码的运行结果,我们可以看出来:


printf("%p\n", arr);
  printf("%p\n", &arr[0]);
  printf("%p\n", &arr);

运行结果一样!因此地址也是一样的!


printf("%p\n", arr);
  printf("%p\n", arr+1);
  printf("%p\n", &arr[0]);
  printf("%p\n", &arr[0]+1);

由地址的最后数字的改变可以看出来:(8——》’C‘(12))跳过了四个字节!一个int !


然而:由:


printf("%p\n", &arr);
  printf("%p\n", &arr+1);

这个的运行结果:(68——》90)可以看出来:跳过了整个数组的大小!!


所以出现那个运行结果的差距!


相关文章
|
2月前
|
搜索推荐 C语言
指针与数组
指针与数组
51 9
|
2月前
|
算法 Java
双指针在数组遍历中的应用
文章深入探讨了双指针技术在数组遍历中的应用,通过实战例子详细解释了快慢指针和首尾指针的不同用法,并提供了解决LeetCode相关问题的Java代码实现。
|
2月前
|
存储 程序员 C语言
指针的高级应用:指针数组、数组指针、函数指针等。
指针的高级应用:指针数组、数组指针、函数指针等。
81 0
|
3月前
|
运维
开发与运维数组问题之指针的加减法意义如何解决
开发与运维数组问题之指针的加减法意义如何解决
38 7
|
3月前
|
C++ 索引 运维
开发与运维数组问题之在C++中数组名和指针是等价如何解决
开发与运维数组问题之在C++中数组名和指针是等价如何解决
22 6
|
4月前
|
C语言
指针进阶(C语言终)
指针进阶(C语言终)
|
26天前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
|
2月前
|
C语言
【C初阶——指针5】鹏哥C语言系列文章,基本语法知识全面讲解——指针(5)
【C初阶——指针5】鹏哥C语言系列文章,基本语法知识全面讲解——指针(5)
|
2月前
|
C语言
【C初阶——指针4】鹏哥C语言系列文章,基本语法知识全面讲解——指针(4)
【C初阶——指针4】鹏哥C语言系列文章,基本语法知识全面讲解——指针(4)
|
2月前
|
存储 编译器 C语言
【C初阶——指针3】鹏哥C语言系列文章,基本语法知识全面讲解——指针(3)
【C初阶——指针3】鹏哥C语言系列文章,基本语法知识全面讲解——指针(3)