首页
学习
活动
专区
圈层
工具
发布

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

p中,此时指针变量p就是指向变量i,注意p中的是i的地址;然后我通过对指针解引用,就是在指针前面加一个*,来通过地址访问i的内存,也就是i的值;很明显打印的值就是i的值;同理,浮点型,字符型的变量都是可进行如上操作的...; 数组指针 数值指针,其主体是指针,他就是个指针,不过是有点不同而已,这个指针指向的是数组的地址,在此之前我们需要了解数组的地址; 数组的地址; 我们通常说数组的地址是数组名,是数组的首元素地址,也确实是这样...指针数组 含义 指针数组,主体是数组,不同的是里面存的是指针,是地址; 指针数组打印二维数组 值得注意的是指针数组的[]前面的*p是没有括号的,我们可以这样看,他是一个数组,数组名是p,数组元素个数是3...,(3个地址),p的前面加上一个*,就是指针,那就是指针数组啦, 总结:1.指针数组的形如*p[n]的数组,而数组指针是指针指向的是数组,形如(*p)[n],里面存的不是数组首元素的地址,而是整个数组的地址...2.二维数组的数组名代表的是一行的一维数组的整个地址,当我们用数组指针指向二维数组时,就直接取二维数组的数组名就好啦。

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

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

    ); printf("对指针解引用得到的是指针指向的那个目标:>%c\n", *p2); printf("%s\n", p2); return 0; } 2-2 误区: 误以为代码2中p2指针变量是存放着字符串...,实际上p2所指向的是字符串"abcdef”中首个字符'a'的地址(原因有两点:1.指针变量在x86位(32位机器下)是4个字节,但是"abcdef“有7个字符,一个指针只能存放一个地址;2.通过指针解引用打印出...异 (1)字符'a'的存储位置:代码1中的'a'存放在栈区,代码2中的'a'存放在字符常量区(通过下方截图可以证明) 2-4 关于字符常量区: 对于上图的解释3: - 既然位于字符常量区的...【指针数组模拟打印二维数组】  这和arr[3][5]的区别在于arr[3][5]在内存中中每一个元素的地址都是连续的,而指针数组模拟的二维数组这种方式的地址不是连续的。...特别注意:数组索引中的元素个数5也是类型的一部分 //所以int [4]和int [5]所属的是不同的类型 int arr[5] = { 1,2,3,4,5 }; //p1先和方块5(也就是[5

    1.2K40

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

    typedef 定义一个数组指针类型 , typedef int(*ArrayPointer)[3]; 然后 , 定义一个普通数组 , 之后的 数组指针 指向该数组 , int array2...[3] = {0}; 最后 , 声明一个 数组指针类型 变量 , 将 array2 变量地址赋值给该 数组指针类型 变量 , 指针指向的数据类型为 int[3] 数组类型的变量 array2 ;...(i = 0; i < 3; i++) { array2[i] = i + 1; } 使用 数组指针 , 打印数组元素内容 : // 使用 数组指针 访问数组中的值...// 首先 , 定义 数组指针类型 别名 typedef int(*ArrayPointer)[3]; // 然后 , 定义一个普通数组 , 之后的 数组指针 指向该数组...for(i = 0; i < 3; i++) { array2[i] = i + 1; } // 使用 数组指针 访问数组中的值 for(i = 0;

    3.8K10

    数组指针和指针数组

    一、数组指针 初学C语言的朋友对数组指针这指针数组感到迷惑,分不清,包括我自己,其实是对概念的不清晰以及对数组和指针这两个概念理解的不够深入,下面谈谈我的理解。...数组指针,是一个指针而不是数组。 这个指针具有指向整个数组的能力,保存这个数组的其实地址。...,&a代表整个数组的地址 //通过数组指针赋值 for(int i=0;i < 5;++i){ (*p)[i] = i; } //sizeof sizeof(p);\\4 指针变量的大小,...数组中的每一个元素都是一个指针,这些元素构成的集合就是这个数组。...char* str[] = {"China","American","Russia"}; //数组中的每一个都是字符串常量 //字符串常量保存在.data段中的.rodata段 //实际上常量字符串就是一个指针

    98110

    指针数组和数组指针

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

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

    (也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。...大小:一个int型指针长度的空间 如要将二维数组赋给一指针,应这样赋值: int a[3][4]; int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。  ...但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。...数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。...比如要表示数组中i行j列一个元素: *(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j] 优先级:()>[]>*

    69820

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

    , 这是一个数组指针, 数组中每个元素都是指向一个字符串的指针 ; ( 3 ) char env[] 参数* : 环境变量数组, 这是一个数组指针, 数组中每个元素都是指向一个字符串的指针 ; 这个环境变量...( 1 ) 传递指针也是传值 ( 修改指针指向的地址的内容是用户行为 ) : 只是传的是指针变量的值, 但是这个变量中存放着地址, 函数中可以改变这个地址的值 ; 2.数组传递的方式 : ( 1..._2d(int array_2d[][2], int row) { /* 计算二维指针的列数 ( 1 ) array_2d 是二维指针中的 数组指针 数组中的首元素 ( 2 ) array..._2d 是一个完整的数组指针, 该指针中包含着 其指向的数组的 类型 和 大小 ( 3 ) 数组指针退化时, 退化的只是 array_2d 的 数组指针 数组 (最外层的一维数组) 大小,...数组指针 ) 右左法则 : 1.最里层标示符 : 先找到最里层的圆括号中的标示符; 数组指针和函数指针的标示符 ( 指针变量名 ) 都在中间的圆括号中, 因此该步骤先找到指针变量名 2

    4.1K30

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

    之后的 数组指针 指向该数组 , int array2[3] = {0}; 然后 , 直接定义数组类型变量 , int (*p)[3] = NULL; 最后 , 将 array2 变量地址赋值给该...数组指针类型 变量 , 指针指向的数据类型为 int[3] 数组类型的变量 array2 ; ArrayPointer p = NULL; p = &array2; 验证上述 定义的数组指针...; } 使用 数组指针 , 打印数组元素内容 : // 使用 数组指针 访问数组中的值 for(i = 0; i < 3; i++) { printf("..., 将 array2 变量地址赋值给该 数组指针类型 变量 // 指针指向的数据类型为 int[3] 数组类型的变量 array2 p = &array2; // 为数组赋值...int i = 0; for(i = 0; i < 3; i++) { array2[i] = i + 1; } // 使用 数组指针 访问数组中的值

    3.9K20

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

    ,读取非法的地址程序会修改其他的内存中的值导致程序崩溃,野指针。...图片 图片 PS: 区分指针数组int *a[3]和数组指针int (*a)[3],前者时存放指针的数组,后者是指向数组的指针。...PS: 内存映像象图 内容 权限 栈区 函数中的普通变量 可读可写 堆区 动态申请的内存 可读可写 静态变量区 static修饰的变量 可读可写 数据区 用于初始化变量的常量 只读 代码区 代码指令 只读...这四个不是什么鬼,他们也存在在内存中,只是跟arr这个变量不在同一段空间,它们被分配在只读数据区,数组arr[4]的四个指针元素,分别存放着这四个字符串的首地址,想象一下,从栈区有四只无形的手指向数据区的空间...比如要表示数组中i行j列一个元素: *(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j] 优先级:()>[]>*(优先级问题详见C语言优先级文章) 数组指针分析:在这里“

    2.1K30

    c专题之指针---数组指针与指针数组的区别

    一、数组指针与指针数组的区别: 1、从字面意思去理解他两的区别: (1)指针数组的实质是一个数组,这个数组中存储的内容全部是指针变量。...换句通俗的话来讲,指针数组就是指针的数组,核心是一个数组,什么样的数组呢?装着指针的数组。 (2)数组指针的实质是一个指针,这个指针指向的是一个数组。...也可以换句通俗的话语来理解,数组指针就是数组的指针,核心是一个指针,什么样的指针呢?指向数组的指针。...第三步:以后继续向外扩展 (3)用上面的规律来分析这3个符号: 第一个,int *p[5]; 核心是p,p是一个数组,数组有5个元素,数组中的元素都是指针,指针指向的元素类型是...第二个,int (*p)[5]; 核心是p,p是一个指针,指针指向一个数组,数组有5个元素,数组中存的元素是int类型; 总结一下整个符号的意义就是数组指针。

    2.1K11

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

    ,读取非法的地址程序会修改其他的内存中的值导致程序崩溃,野指针。...PS: 区分指针数组int *a[3]和数组指针int (*a)[3],前者时存放指针的数组,后者是指向数组的指针。...这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。...比如要表示数组中i行j列一个元素: *(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j] 优先级:()>[]>* 数组指针分析:在这里“()”的优先级比“[]”高,“*”...号和p2 构成一个指针的定义,指针变量名为p2,int 修饰的是数组的内容,即数组的每个元素。

    2K20

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

    前言: 本文主要讲解指针进阶部分的内容,分为字符指针,指针数组,数组指针,函数指针。...TIP: 因为此时的字符串是一个常量字符串,所以修饰指针p最好要有const,并且在*左边。 指针数组 指针数组的主语是数组,顾名思义就是存放指针的数组。...int *arr[5];//存放整型地址的指针数组 char *arr[6];//存放字符类型的指针数组 数组指针 概念辨析 我们类比一下: 整型指针:指向整型变量的指针,存放整型变量的地址的指针。...数组指针:指向数组的指针,存放数组地址的指针。...数组指针一般和二维数组联动。 因为数组指针存放的是一整个数组的地址,而二维数组传参,二维数组的数组名就表示这个二维数组首行的地址(注意是首行的地址!)

    35210

    指针数组和数组指针详解

    下面接着分析数组指针和指针数组是如何访问二维数组的,先看数组指针的访问方式。...在接下来的访问中,由于p1指向的类型是int [4],所以从p1到p1+1的变化值为44个字节,即p1+1=15726992。从前面的运行结果中可以发现,p1+1刚好指向第二行的起始地址。...通过p1+i刚好能够取遍每行的起始地址,有了每行的起始地址之后,就可以通过“*(*(p1+i)+j)”来取出二维数组中每行的每一个元素。...指针数组的访问方式要更容易一些,因为定义的指针数组p2由4个元素p2[0],p2[1], p2[2], p2[3]组成,每个元素都是一个整型指针,所以只需要在程序中取出每行的起始地址并放到p2指针数组对应的元素中...,就可以访问二维数组arr中的元素了。

    54020

    指针数组与数组指针详解

    指针数组:指针数组可以说成是”指针的数组”,首先这个变量是一个数组,其次,”指针”修饰这个数组,意思是说这个数组的所有元素都是指针类型,在32位系统中,指针占四个字节。...arr[4]是一个在主函数定义的数组。把它对应到对应到内存中,arr是一个在栈区,有四个元素的数组,而每一个数组又是一个指针,所以说它的四个元素各占四个字节,所以变量arr的大小是16个字节。...因此,指针数组对应着二级指针 void fun(char **pp);//子函数中的形参 fun(char *p[]);//主函数中的实参 12 3.2指针数组的排序 指针数组的排序非常有趣...,因为这个数组中存放的是指针,通过比较指针指向的空间的大小,排序这些空间的地址。...void fun(int (*P)[4]);//子函数中的形参,指针数组 a[3][4] = {0};//主函数中定义的二维数组 fun(a);//主函数调用子函数的实参,是二维数组的首元素首地址

    72020

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

    )[3]; 然后 , 使用别名类型 , 声明数组变量 , ArrayType array2 = {0}; 最后 , 声明一个指针 , 将 array2 变量地址赋值给该指针 , 指针指向的数据类型为...int[3] 数组类型的变量 array2 ; ArrayType *p = NULL; p = &array2; 验证上述 定义的数组指针 : 为 数组元素 赋值 , //...: // 使用 数组指针 访问数组中的值 for(i = 0; i < 3; i++) { printf("%d\n", (*p)[i]); } 二、完整代码示例...// 最后 , 声明一个指针 , 将 array2 变量地址赋值给该指针 // 指针指向的数据类型为 int[3] 数组类型的变量 array2 ArrayType *p = NULL;...i + 1; } // 使用 数组指针 访问数组中的值 for(i = 0; i < 3; i++) { printf("%d\n", (*p)[i])

    4.1K20
    领券