首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

数组指针和指针数组

一、数组指针 初学C语言的朋友对数组指针这指针数组感到迷惑,分不清,包括我自己,其实是对概念的不清晰以及对数组和指针这两个概念理解的不够深入,下面谈谈我的理解。...数组指针,是一个指针而不是数组。 这个指针具有指向整个数组的能力,保存这个数组的其实地址。...是数组指针变量 二、指针数组 指针数组,是一个数组,而不是指针。...,这个指针指向.rodata对应的常量字符串 指针数组的应用 完整的main函数原型,int main(int arc,char* argv[],char* envp[]) 其中,两个数组分别保存命令行参数和环境变量...为了提高程序执行的效率,C语言不做数组下标的安全性检查。如果进行了检查当数组数据量非常大时候会显著减低程序的效率,在安全性和高效率之间,权衡利弊之下。

76710

指针+数组指针+字符指针+指针数组

,而前面的 int 是指针变量p 要指向的变量的类型; 例如: #include int main() { int *p,i;//定义整形指针变量p,和普通变量i; p=...,所以*自然就是指针变量的标志了,在定义的同时,指向一个变量,其实就是把定义和取地址,合并了起来,这两个代码是等同的; 那接下来我们开始了解通过指针访问变量地址,话不多说上代码: 如图:我将普通变量的地址放在了指针变量...; 数组指针 数值指针,其主体是指针,他就是个指针,不过是有点不同而已,这个指针指向的是数组的地址,在此之前我们需要了解数组的地址; 数组的地址; 我们通常说数组的地址是数组名,是数组的首元素地址,也确实是这样...3.打印的第一行和打印的第3行的地址是相同的,说明数组名就是数组首元素的地址,而对数组取地址的这个地址也同样是数组首元素的地址: 结论:二者都是数组首元素的地址,不同的是,步长大小不同; 我们再回到数组指针上...指针数组 含义 指针数组,主体是数组,不同的是里面存的是指针,是地址; 指针数组打印二维数组 值得注意的是指针数组的[]前面的*p是没有括号的,我们可以这样看,他是一个数组,数组名是p,数组元素个数是3

7410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【进阶指针一】字符数组&数组指针&指针数组

    2-2 误区: 2-3  代码一和代码二的异同: 2-4 关于字符常量区: 2-5 一道为了区分栈区和字符常量区&&字符数组和字符指针的面试题:  3.指针数组 3-1 指针数组长什么样捏?...数组指针 4-1 区分取地址数组名和数组名(老生常谈了) 4-2 辨析数组指针和指针数组  4-3 学会了?...来看一个小测试题 4-4  来看一个脱裤子放屁的代码【看一看数组指针的使用】  4-5 这才是数组指针的正确使用方法捏【数组指针模拟打印二维数组】 5 测试题和规律总结 测验1: 测验2:那么指针数组指针...4-2 辨析数组指针和指针数组  图图我就省略喽!...我总结的一点小规律 如果光要给上面这个东西命名的话,只用关注*和[]的出现次序排列就可以了 比如;数组指针数组:[]*[]            指针数组指针*[]*  然后再把[]存的内容和*

    96640

    【C 语言】数组 ( 数组指针 | 数组指针定义 | 使用 数组指针类型 定义数组指针 )

    文章目录 总结 一、使用 数组指针类型 定义数组指针 二、完整代码示例 总结 // 首先 , 定义 数组指针类型 别名 typedef int(*ArrayPointer)[3];...// 然后 , 声明一个 数组指针类型 变量 ArrayPointer p = NULL; 一、使用 数组指针类型 定义数组指针 ---- 使用 数组指针类型 定义数组指针 , 首先 , 使用...typedef 定义一个数组指针类型 , typedef int(*ArrayPointer)[3]; 然后 , 定义一个普通数组 , 之后的 数组指针 指向该数组 , int array2...[3] = {0}; 最后 , 声明一个 数组指针类型 变量 , 将 array2 变量地址赋值给该 数组指针类型 变量 , 指针指向的数据类型为 int[3] 数组类型的变量 array2 ;..., 数组元素是指针 (作为参考) char *array = {"12", "ab", "34"}; // 数组指针 , 使用指针变量指向数组 // 使用 数组指针类型 定义数组指针

    3K10

    【C 语言】数组 ( 数组指针 | 数组指针定义 | 直接定义 数组指针 )

    文章目录 总结 一、直接定义 数组指针 二、完整代码示例 总结 int (*p)[3] = NULL; 一、直接定义 数组指针 ---- 直接定义 数组指针 , 首先 , 定义一个普通数组 ,...数组指针类型 变量 , 指针指向的数据类型为 int[3] 数组类型的变量 array2 ; ArrayPointer p = NULL; p = &array2; 验证上述 定义的数组指针...; } 使用 数组指针 , 打印数组元素内容 : // 使用 数组指针 访问数组中的值 for(i = 0; i < 3; i++) { printf("..., 数组元素是指针 (作为参考) char *array = {"12", "ab", "34"}; // 数组指针 , 使用指针变量指向数组 // 首先 , 定义一个普通数组..., 将 array2 变量地址赋值给该 数组指针类型 变量 // 指针指向的数据类型为 int[3] 数组类型的变量 array2 p = &array2; // 为数组赋值

    3.4K20

    CCPP 指针变量 | 数组指针 | 指针数组 | 野指针 | 空指针

    普通变量和指针变量 共性 PS: 可见这4个函数的汇编指令完全一致,无论是什么类型的指针变量,对指针变量的读写跟普通变量没有任何区别,所谓的指向只是描述指针变量的值时多少而已,就读写而言,指针变量跟普通变量没有任何区别...空指针和野指针 野指针:定义了一个指针变量,如果没有进行初始化,系统就会有可能随机赋值一个地址给这个指针变量,也就是说,这个指向指向一个未知的区域。...图片 图片 PS: 区分指针数组int *a[3]和数组指针int (*a)[3],前者时存放指针的数组,后者是指向数组的指针。...指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。 还需要说明的一点就是,同时用来指向二维数组时,其引用和用数组名引用都是一样的。...()”的优先级比“[]”高,“*”号和p2 构成一个指针的定义,指针变量名为p2,int 修饰的是数组的内容,即数组的每个元素。

    1.7K30

    指针数组和数组指针

    指针数组 :就是指针的数组,数组的元素是指针;  数组指针:就是指向数组的指针。 简单举例说明:     int *p1[10];    声明了一个数组,数组的元素是int型的指针。    ...int (*p2)[10]; 声明了一个指针, 指向了一个有十个int元素的数组。 这两种写法主要是因为运算符的优先级, 因为[]的优先级比*高。...第一种写法:p先和[]结合,所以是一个数组,后与*结合,是指针数组。 第二种写法:()的优先级比[]高,*号和p2构成一个指针的定义,指针变量名为p,int 修饰的是数组的内容,即数组的每个元素。...数组在这里并没有名字,是个匿名数组,           那现在我们清楚p 是一个指针,它指向一个包含10 个int 类型数据的数组,即数组指针 ?...int a[3]={1,2,3}; int (*p)[3]=&a;//指向3个int型数组元素的数组指针 int* p2[3]; //存贮3个int型变量地址 for(int i=0;i<3

    1.1K90

    简单理解数组指针和指针数组

    int a1,a2,a3; p[0]=&a1; p[1]=&a2; p[2]=&a3; 在理解: 数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组...如要将二维数组赋给一指针,应这样赋值: int a[3][4]; int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。...指针数组 定义 int *p[n]; []优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。...这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。...还需要说明的一点就是,同时用来指向二维数组时,其引用和用数组名引用都是一样的。

    13910

    CCPP 指针变量 | 数组指针 | 指针数组 | 野指针 | 空指针

    普通变量和指针变量 共性 PS: 可见这4个函数的汇编指令完全一致,无论是什么类型的指针变量,对指针变量的读写跟普通变量没有任何区别,所谓的指向只是描述指针变量的值时多少而已,就读写而言,指针变量跟普通变量没有任何区别...空指针和野指针 野指针:定义了一个指针变量,如果没有进行初始化,系统就会有可能随机赋值一个地址给这个指针变量,也就是说,这个指向指向一个未知的区域。...PS: 区分指针数组int *a[3]和数组指针int (*a)[3],前者时存放指针的数组,后者是指向数组的指针。...还需要说明的一点就是,同时用来指向二维数组时,其引用和用数组名引用都是一样的。...号和p2 构成一个指针的定义,指针变量名为p2,int 修饰的是数组的内容,即数组的每个元素。

    1.7K20

    指针进阶(1)(字符指针,指针数组,数组指针,函数指针)

    形式辨析 int * p; 首先*表示这是一个指针,命名为p,然后指向的是int类型的指针,数组指针也一样 int(*p) [5]; 上面的形式就是数组指针,我们需要先用()把*和指针名括起来,然后剩下的就是指针指向的类型...数组指针一般和二维数组联动。 因为数组指针存放的是一整个数组的地址,而二维数组传参,二维数组的数组名就表示这个二维数组首行的地址(注意是首行的地址!)...形参接收分为数组接收和指针接收。...函数的地址: 没错,函数也是有地址的,并且&Add,和Add本身都是一样的 int Add(int x, int y) { return x + y; } int main() { printf(...int,void(*)(int),函数应该还有函数的返回类型,此时把前面的signal和两个参数全部去掉,发现剩下void(*)(int),这就是函数的返回类型!

    11110

    指针数组与数组指针详解

    指针数组与数组指针详解 1.什么是指针数组和数组指针?...2.2数组指针 首先来定义一个数组指针,既然是指针,名字就叫pa char (*pa)[4]; 1 如果指针数组和数组指针这俩个变量名称一样就会是这样:char *pa[4]和char (*...既然pa是一个指针,存放一个数组的地址,那么在我们定义一个数组时,数组名称就是这个数组的首地址,那么这二者有什么区别和联系呢?...因为a是数组首元素首地址,pa存放的却是数组首地址,a是char 类型,a+1,a的值会实实在在的加1,而pa是char[4]类型的,pa+1,pa则会加4,虽然数组的首地址和首元素首地址的值相同,但是两者操作不同...如果是向子函数传参,这和传递一个普通数组的思想一样,不能传递整个数组过去,如果数组很大,这样内存利用率很低,所以应该传递数组的首地址,用一个指针接收这个地址。

    47420

    【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)

    多维数组 和 多维指针 1....② &函数名 | 调用函数指针方法 : ① 函数指针变量名(参数) ② (*函数指针变量名)(参数) | 函数名 和 &函数名 是等价的 | 函数指针变量名(参数) 和 (*函数指针变量名)(参数)...多维数组 和 多维指针 1....分别申请 数组指针空间 和 数据空间 ; ( 1 ) 申请数组指针空间 : 申请三个 数组指针 空间, 只是三个普通的指针, 但是该指针类型是 int(*)[3], 即指向 int[3] 数组的指针..._2d 是一个完整的数组指针, 该指针中包含着 其指向的数组的 类型 和 大小 ( 3 ) 数组指针退化时, 退化的只是 array_2d 的 数组指针 数组 (最外层的一维数组) 大小,

    3.7K30

    指针数组和数组指针详解

    单从字面上来看似乎很难分清它们是什么,我们先来看看指针数组和数组指针的定义。...指针数组:数组类型 *数组名[数组长度]; 例:int *parr[5]; 数组指针:类型名 (*指针名)[数组长度]; 例:int (*parr)[5]; 现在我们再来通过上面的定义来分析一下指针数组和数组指针...=%d\t",i,j,*(p2[i]+j)); } printf("\n"); } return 0; } 运行结果: 从结果可以看出我们成功的使用数组指针和指针数组的方式访问了二位数组...在分析数组指针和指针数组是如何访问二维数组之前,我们通过下面一段代码来学习一下表示二维数组每行起始地址的方式。...下面接着分析数组指针和指针数组是如何访问二维数组的,先看数组指针的访问方式。

    43820

    其他|二维指针,数组指针,指针数组

    1c++ c/c++的重要性毋庸置疑,凡是对性能要求很高的系统和算法,其中核心代码都会考虑用c++编写。...c++的精华无疑是指针,指针的灵活,创建和销毁完全靠我们掌控。用到指针,一般都会用到二维指针或数组指针,下面总结下它们的某些应用场景。...2二维指针 二维指针:指针变量指向的是指针,如: char **pa; 常用二维指针的场合是第一维和第二维元素个数都不确定的情况下,或者个数是动态变化的场合。 二维指针如何申请堆地址?...与申请顺序相反: for(int i=0; i<m; i++){ delete[] pa[i]; } 最后释放pa: delete[] pa; 3数组指针 数组指针,是指向数组的指针,如:...和二维指针相比,它有一个维度的个数必须是确定的,此处等于2,它创建如下: pa = new char[m][2]; 释放: delete [] pa; 4指针数组 指针数组是数组,里面的元素是指针。

    1.2K51

    【C 语言】数组 ( 数组指针 | 数组指针定义 | 使用 数组类型* 定义数组指针 )

    * 定义数组指针 ---- 数组类型指针 就是 定义一个指针 , 指向数组首地址 ; 使用 数组类型* 定义数组指针 , 首先 , 定义数组类型 别名 , typedef int(ArrayType...)[3]; 然后 , 使用别名类型 , 声明数组变量 , ArrayType array2 = {0}; 最后 , 声明一个指针 , 将 array2 变量地址赋值给该指针 , 指针指向的数据类型为...---- 代码示例 : #include #include #include int main() { // 指针数组 , 数组元素是指针...char *array = {"12", "ab", "34"}; // 数组指针 , 使用指针变量指向数组 // 使用 数组别名 定义数组指针 // 首先 ,...// 最后 , 声明一个指针 , 将 array2 变量地址赋值给该指针 // 指针指向的数据类型为 int[3] 数组类型的变量 array2 ArrayType *p = NULL;

    3.4K20

    什么是 字符指针? 数组指针? 函数指针? 函数指针数组?

    开篇备忘录: 给自己时间, 和自己合作....所以str1和str2不同,str3和str4相同。 数组指针变量 1. 数组指针变量是什么?...int *p1[10]; int (*p2)[10]; 答案是:int (*p)[10]; 解释 p先和 * 结合,说明p是⼀个指针变量变量,然后指着指向的是⼀个大小为10个整型的数组。...所以p是⼀个指针,指向⼀个数组,叫数组指针。 这里要注意:[]的优先级要高于 * 号的,所以必须加上()来保证p先和 * 结合. 2....熟练掌握这些概念,并能够灵活运用,可以帮助我们更好地进行程序设计和开发,提高代码的可读性和可维护性。在实际编程中,合理地运用这些指针概念,可以让我们的程序更加高效、灵活和功能强大。

    7610

    8.6 指针数组和多重指针

    01 什么是指针数组 1、一个数组,若其元素均为指针类型数据,称为指针数组,也就是说,指针数组中的每一个元素都存放一个地址,相当于一个指针变量。...2、一般形式 类型名 *数组名[数组长度]; 类型中应包括符合*,如int *表示是指向整数数据的指针类型。...3、例子 int *p[4]; 4、由于[]比*优先级高,因此p先和[4]结合,形成p[4]形式,这显然是数组形式,表示p数组有4个元素。...然后再和p前面的*结合,*表示此数组是指针类型的,每个数组元素都可以指向一个整型变量。 02 指向指针数据的指针 1、在了解了指针数组的基础上,需要了解指向指针数据的指针变量,简称指向指针的指针。...2、在某些情况下,main函数可以有参数,例如:int main(int argc,char *argv[])其中,argc和argv就是main函数的形参,他们是程序的“命令行参数”。

    3423129

    【C语言进阶】指针数组 —— 数组指针

    文章目录 前言 指针数组 指针数组的定义 ✅ 指针数组的使用 如何访问存放在的指针数组里的数组元素 数组指针 数组指针的定义 &数组名VS数组名 数组指针的使用 数组指针(实例) 全篇总结...其实我们可以采用类比的方法进行比较,比如说 整形数组 和 指针数组 俩个命名只有前面两个字不一样。...注:[ ]的优先级要高于号的,所以必须加上()来保证p先和结合。...数组指针(实例) ⛳️这里我们就采用指针数组介绍指针和普通的方法接收数组来演示一下。...3, 5); return 0; } 代码结果: 全篇总结 ✅ 归纳: 好了以上就是关于 指针数组 or 数组指针 的全部区别和知识点已经讲解清楚了!

    16310
    领券