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

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

目录 1.初阶指针内容回顾 2.字符指针 2-1 字符指针长什么样?...2-2 误区: 2-3  代码一和代码二的异同: 2-4 关于字符常量区: 2-5 一道为了区分栈区和字符常量区&&字符数组字符指针的面试题:  3.指针数组 3-1 指针数组长什么样捏?...同: (1)指针类型:p1和p2都是字符指针变量,都是存放的是字符a的地址。...//整型数组 int arr1[5]={1,2,3,4,5};//存放整型的数组 //字符数组 char arr2[5]={'a','b','c,''d','\0'};//存放字符数组 //指针数组...数组指针 int main() { //整型指针-指向整型的指针-存放整型变量的地址 int a = 10; int* pa = &a; //整型指针-指向字符指针-存放字符变量的地址 char

91640

【C语言】指针进阶:字符指针&&数组指针&&函数指针

有了前面的一些指针的基础之后呢,我们将从这篇博客开始,开始一起探究指针的高级主题:指针的进阶,将通过不止一篇的博客讲完这部分的内容,下面一起来看一看> ---- 字符指针指针的类型中我们知道有一种指针类型为字符指针...其实很简单,这里str3和str4指向的是一个同一个常量字符串。C/C++会把常量字符串存储到单独的一个内存区域,当指针指向同一个字符串的时候,他们实际会指向同一块内存。...下面,我们再来重新简单认识一下,这不是今天的重点,下面指针数组的含义: int* arr1[10]; //整形指针数组 char *arr2[4]; //一级字符指针数组 char **arr3[5...];//二级字符指针数组指针数组,反过来想:那有没有数组指针。...浮点指针: float * pf; 能够指向浮点数据的指针。 那数组指针应该是:能够指向数组指针.

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

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

【C 语言】指针数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读) 文章目录...字符串函数 长度受限制 情况 ( 1 ) 受限制的字符串函数 ( 推荐使用 降低错误率 ) 五. 指针数组数组指针 1....char* month[] 参数分析 : 指针数组 ( 1 ) 常量分析 : 左数右指, 指针指向的数组内容不能修改 ( 2 ) 参数内容 : 指针数组, 每个指针指向一个字符数组, 这些字符数组都是字符串...遍历指针数组中指向的每个字符串, 与传入的 key 进行对比, 如果相等, 那么返回字符串在指针数组的索引 // ( 1 ) 对比函数 : 注意 strcmp 函数, 对比两个字符串, 如果相等 则..., 这是一个数组指针, 数组中每个元素都是指向一个字符串的指针 ; ( 3 ) char env[] 参数* : 环境变量数组, 这是一个数组指针, 数组中每个元素都是指向一个字符串的指针 ; 这个环境变量

3.5K30

指针详解(二级指针指针数组数组指针字符指针、二维数组传参、函数指针变量)(二)

我们类比一下: 整型数组 - 存放整型数据的数组(数组中的每个元素是整型) 字符数组 - 存放字符数据的数组(数组中的每个元素是字符类型) 指针数组 - 存放指针数组(数组中的每个元素是指针类型...整形指针变量: int * pint; 存放的是整形变量的地址,能够指向整形数据的指针。 浮点指针变量: float * pf; 存放浮点变量的地址,能够指向浮点数据的指针。...三、字符指针 字符指针,它指向一个字符数组字符串。 用途 1、动态内存分配:字符指针可以用于动态内存分配,这在处理变长字符串或其他数据结构时非常有用。...0; } 对于 "abcdef"[3] 1、你可以把字符串想象为一个数组,但是这个数组是不能修改的 2、当常量字符串出现在表达式中,他的值是默认第一个字符的地址,而[3]让他指向第四个字符并访问...,C/C++会把常量字符串存储到单独的一个内存区域中,当几个指针指向同一个字符串的时候,实际上会指向同一块内存,但是相同的常量字符串去初始化不同的数组的时候,会开辟不同的内存块,所以str1和str2不同

13110

CCPP结构中的字符数组字符指针

结构中的字符数组字符指针 一般情况下我们在结构中都使用字符数组来存储字符串,是否可以使用指向char的指针来代替字符数组呢?...struct pnames treas = {"hig","klm"};//字符串全部存储在编译器存储常量的地方(特别注意,是利用指针定义的数组,不是之前定义好的) #define LEN 20 struct...pnames { char *first; char *last; } struct pnames treas = {"hig","klm"}; names结构体中的字符串存放在结构体内部,结构体需要分配...struct pnames结构体不需要为字符串分配任何存储空间,它使用的是存储在别的地方的字符串,指针只提供操作的可能。...有关结构体中字符数组的其他的用法: 可以使用malloc分配内存并使用指针储存该地址。(详见C Primer Plus P459)

1.5K20

C++字符数组存放字符串 | 字符指针变量

C++指向数组指针作函数参数  一维数组名可以作为函数参数传递,多维数组名也 可作函数参数传递。 ...C++用字符数组存放一个字符串 在C++中可以用多种方法访问一个字符串,第一种字符数组: #include//预处理 using namespace std;//命名空间  int ...第二种,字符串变量,编译运行结果: #include//预处理 #include using namespace std;//命名空间  int main()//主函数...第三种,字符指针变量,编译运行结果: #include//预处理 #include using namespace std;//命名空间  int main()//主函数...对字符串中字符的存取,可以用下标方法,也可以用指针方法。 C++字符数组存放字符串 | 字符指针变量 更多案例可以go公众号:C语言入门到精通

1.2K2218

数组指针指针数组

一、数组指针 初学C语言的朋友对数组指针指针数组感到迷惑,分不清,包括我自己,其实是对概念的不清晰以及对数组指针这两个概念理解的不够深入,下面谈谈我的理解。...数组指针,是一个指针而不是数组。 这个指针具有指向整个数组的能力,保存这个数组的其实地址。...是数组指针变量 二、指针数组 指针数组,是一个数组,而不是指针。...char* str[] = {"China","American","Russia"}; //数组中的每一个都是字符串常量 //字符串常量保存在.data段中的.rodata段 //实际上常量字符串就是一个指针...,这个指针指向.rodata对应的常量字符指针数组的应用 完整的main函数原型,int main(int arc,char* argv[],char* envp[]) 其中,两个数组分别保存命令行参数和环境变量

73210

【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"}; // 数组指针 , 使用指针变量指向数组 // 使用 数组指针类型 定义数组指针

2.9K10

指针数组数组指针

指针数组 :就是指针数组数组的元素是指针;  数组指针:就是指向数组指针。 简单举例说明:     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

【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.3K20

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

图片 图片 PS: 区分指针数组int *a[3]和数组指针int (*a)[3],前者时存放指针数组,后者是指向数组指针。...指针数组数组指针 引入 int *b可以用来定义数组(详见指针数组定义字符串的区别文章) int a = [1,2,3,4,5]; int *b = a; char (*b)[5]用来指向数组 char...这四个不是什么鬼,他们也存在在内存中,只是跟arr这个变量不在同一段空间,它们被分配在只读数据区,数组arr[4]的四个指针元素,分别存放着这四个字符串的首地址,想象一下,从栈区有四只无形的手指向数据区的空间...指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。 还需要说明的一点就是,同时用来指向二维数组时,其引用和用数组名引用都是一样的。...数组在这里并没有名字,是个匿名数组。那现在我们清楚p2 是一个指针,它指向一个包含10 个int 类型数据的数组,即数组指针

1.7K30

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

PS: 区分指针数组int *a[3]和数组指针int (*a)[3],前者时存放指针数组,后者是指向数组指针。...指针数组 定义 int *p[n]; []优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。...这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。...号和p2 构成一个指针的定义,指针变量名为p2,int 修饰的是数组的内容,即数组的每个元素。...数组在这里并没有名字,是个匿名数组。那现在我们清楚p2 是一个指针,它指向一个包含10 个int 类型数据的数组,即数组指针

1.6K20

【C 语言】二级指针作为输入 ( 指针数组 | 指针数组排序 | 字符串排序 | strcmp 函数 )

文章目录 一、strcmp 函数 二、指针数组排序 ( 字符串排序 ) 二、完整代码示例 一、strcmp 函数 ---- strcmp 是 String Compare 缩写 , 该函数用于比较两个字符串...( 字符串排序 ) ---- 指针数组 中的每个元素都是 指向 字符串的指针 , 通过 strcmp 函数对字符串进行排序 , 代码如下 : // 对 指针数组 进行排序 , 排序依据是 指针...发现是 * , 说明数组中的元素是指针 , 挖掉 * , 往右看没内容 , 往左看 * 4....发现是 char , 说明指针指向的数据是 char 类型 * * array 是一个数组 , 数组中的元素的 char * 字符串 * * 这是 指针数组 ,...) / sizeof(array[0]); // 打印上述数组 for(i = 0; i < num; i++) { // 使用 数组下标 与 指针 进行遍历

65110

指针数组数组指针详解

单从字面上来看似乎很难分清它们是什么,我们先来看看指针数组数组指针的定义。...指针数组数组类型 *数组名[数组长度]; 例:int *parr[5]; 数组指针:类型名 (*指针名)[数组长度]; 例:int (*parr)[5]; 现在我们再来通过上面的定义来分析一下指针数组数组指针...这下对指针数组数组指针应该有了初步的了解了吧,接下来我们来通过一段代码进一步了解一下。...在分析数组指针指针数组是如何访问二维数组之前,我们通过下面一段代码来学习一下表示二维数组每行起始地址的方式。...下面接着分析数组指针指针数组是如何访问二维数组的,先看数组指针的访问方式。

40720

指针数组数组指针详解

,它有四个元素,每个元素是一个char *类型的指针,这些指针存放着其对应字符串的首地址。...这四个不是什么鬼,他们也存在在内存中,只是跟arr这个变量不在同一段空间,它们被分配在只读数据区,数组arr[4]的四个指针元素,分别存放着这四个字符串的首地址,想象一下,从栈区有四只无形的手指向数据区的空间...,每个指针存放一个字符串首地址,然后用arr[4]这个数组分别存放这四个指针,就形成了指针数组。...char a[4];, 1 a是一个长度为4的字符数组,a是这个数组的首元素首地址。既然a是地址,pa是指向数组指针,那么能将a赋值给pa吗?答案是不行的!...3.指针数组数组指针的使用 3.1指针数组在参数传递时的使用 指针数组常用在主函数传参,在写主函数时,参数有两个,一个确定参数个数,一个这是指针数组用来接收每个参数(字符串)的地址 int main(

42020

c语言之字符指针变量和字符数组的异同

1.字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串第一个字符的地址),而不是将字符串放到字符指针变量中。 2.赋值方式。...对字符数组只能对各个元素进行赋值,不能用以下办法对字符数组进行赋值。...3.如果定义了一个字符数组,在编译时为它分配内存单元,它有确切的地址。...而定义一个字符指针变量时,给指针变量分配内存单元,在其中也可以放一个字符变量的地址,也就是说,该指针变量可以指向一个字符数据,但如果未对它赋予一个地址值,则它并未指向一个确定的字符数据。...4.字符指针实际上是个常量指针,即char* a实际上是const char* a。

1.4K10

【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

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

c++的精华无疑是指针指针的灵活,创建和销毁完全靠我们掌控。用到指针,一般都会用到二维指针数组指针,下面总结下它们的某些应用场景。...2二维指针 二维指针指针变量指向的是指针,如: char **pa; 常用二维指针的场合是第一维和第二维元素个数都不确定的情况下,或者个数是动态变化的场合。 二维指针如何申请堆地址?...new char* [m]; 然后再对第二维,依次申请n个: for(int i=0; i<m; i++){ pa[i] = new char[n]; } 这样就申请了一个m行n列的二维动态数组...与申请顺序相反: 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
领券