精华内容
下载资源
问答
  • c语言指针数组
    千次阅读
    2021-11-28 23:11:04

    一、指针数组

    1.什么是指针数组

    指针数组是指一个数组,数组里面存放的元素是指针

    2.指针数组的声明形式

    指针数组的声明形式int *p[3]

    3.指针数组的实质

    指针数组的实质是声明了一个包含n个相同类型指针的数组,首先他是一个数组,其次数组存放的内容是指针

    二、什么是数组指针

    1.什么是数组指针

    数组指针是一个指针,这个指针是一个指向数组的指针

    2.数组指针的声明形式

    指针数组的声明形式int (*p)[3]

    3.数组指针的实质

    数组指针是一个指向数组的指针,这个指针表示的是一个数组的起始地址,指向的数据类型是一个有长度指定的数组,即指针+n时,往前移动的长度是数组长度*n

    4.什么时候使用数组指针

    数组指针一般在二维数组中使用

    三、指针数组和数组指针的区别与联系

    1.指针数组是一个数组,数组指针是一个指针,这是最本质的区别
    2.指针数组关心的是数组中指针的内容,数组指针关心的是指针指向的数组中的内容
    3.指针数组和数组指针除了名字相似,两者所要表达的含义完全不同

    四、代码示例

    #include<stdio.h>
    #include<string.h>
    
    
    int main()
    {
    	int i;
    	/*指针数组
    	 *1:指针数组是指针的数组
    	 *2:指针数组的声明形式int *p[3]
    	 *3:指针数组的实质是声明了一个包含n个相同类型指针的数组
    	 *
    	 */
    	/*输出结果	
    		test1
    		p[0] = 1
    		p[1] = 2
    		p[2] = 3
    	*/
    	/*test1*/
    	int a,b,c;
    	a = 1;
    	b = 2;
    	c = 3;
    	int *p[3];
    	p[0] = &a;
    	p[1] = &b;
    	p[2] = &c;
    	printf("test1\n");
    	for(i = 0; i < 3; i++)		
    		printf("p[%d] = %d\n", i, *p[i]);
    	
    	/*数组指针
    	 *1: 数组指针是一个指向数组的指针,这个指针表示的是一个数组的起始地址,
    	 	 指向的数据类型是一个有长度指定的数组,即指针+n时,往前移动	 	 整个数
    	 	 组长度*n
    	 *2: 数组指针的声明形式char (*p)[3]
    	 *3: 数组指针通常用于指向二维数组使用,以便于二维数组的访问
    	 *4: test2将一个数组指针指向一个int型的二维数组
    	 *5: test3将一个数组指针指向一个char型的二维数组
    	 */
    	/*输出结果		
    		test2
    		p1[0][0] = 0
    		p1[0][1] = 1
    		p1[0][2] = 2
    		p1[0][3] = 3
    		p1[0][4] = 4
    		p1[0][5] = 5
    		p1[1][0] = 100
    		p1[1][1] = 101
    		p1[1][2] = 102
    		p1[1][3] = 103
    		p1[1][4] = 104
    		p1[1][5] = 105
    		test3
    		parr[0] = I
    		parr[1] = love
    		parr[2] = CSDN		
    	*/
    	
    	/*test2*/
    	int arr1[2][6];
    	int (*p1)[6];
    	for(i = 0; i < 6; i ++)
    		arr1[0][i] = i;
    	for(i = 0; i < 6; i ++)
    		arr1[1][i] = i+100;
    	p1 = arr1;
    	printf("test2\n");
    	int j;
    	for(i = 0; i < 2; i++)	
    	{
    		for(j =0; j < 6; j++)
    			printf("p1[%d][%d] = %d\n", i, j, *(p1[i]+j));
    	}
    
    	/*test3*/
    	char arr[3][20];
    	char (*parr)[20];
    	strcpy(arr[0],  "I");
    	strcpy(arr[1],  "love");
    	strcpy(arr[2],  "CSDN");
    	parr = arr;
    	printf("test3\n");
    	for(i = 0; i < 3; i++)		
    		printf("parr[%d] = %s\n", i, parr[i]);
    
    }
    
    更多相关内容
  • 作 业使用指针数组函数完成 1. 编写一个通用函数该函数可以实现判断一个含有五位数字的整数是否是回文数回文数的含义是从左向右与从右向左看数是相同的如23732是回文数而23564则不是编写主程序调用该函数实现求所有5...
  • 本文主要介绍C语言 指针数组,这里提供详细的资料和简单示例代码以便大家学习参考,有需要学习的小伙伴可以参考下
  • c语言指针数组

    2019-02-06 20:10:09
    c语言指针一维数组的实现。指针与一维数组的相互转化。
  • c语言 指针数组

    千次阅读 2022-05-06 19:52:15
    文章目录前言一、指针数组的定义声明,赋值:二、指针数组的应用:总结 前言 今天我们讲解一下什么是指针数组。 一、指针数组的定义声明,赋值: 什么是指针数组呢? 指针数组 :就是首先定义一个数组,数组里面的每...


    前言

    今天我们讲解一下什么是指针数组。


    一、指针数组的定义声明,赋值:

    什么是指针数组呢?
    指针数组 :就是首先定义一个数组,数组里面的每一个元素都是一个地址。

    例如:int a=1, b=2, c=3;
    int * d [5] = {&a,&b,&c};
    指针数组 * d[5] 的每一个元素都是一个变量的地址,
    则 d [1] 就是&b, * d [1] ==* &b == b;
    所以 * d [1] 与 b 的用法一摸一样。

    二、指针数组的应用:

    在这里插入图片描述
    注意:
    1.* d [1] 运算中,应该先运算 d [1]再加上* ,因为 [ ] 的优先级要高于 *。


    总结

    指针数组虽然听起来很难,其实只要你真正理解指针的一点推导,就也可以很容易搞懂。之后几节课我们会讲解数组指针

    展开全文
  • C语言指针数组

    2015-01-14 17:10:48
    本资源介绍了C语言学习中的指针数组,但主要是讲两者之间的结合应用,有需要的可以下载。
  • C语言指针数组和数组指针详解

    千次阅读 2022-04-12 21:07:45
    C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) ...C语言数组——一维数组 C语言数组——二维数组 C语言数组——字符数组 C语言中常用的6个字符串处理函

    C语言文章更新目录

    C语言学习资源汇总,史上最全面总结,没有之一
    C/C++学习资源(百度云盘链接)
    计算机二级资料(过级专用)
    C语言学习路线(从入门到实战)
    编写C语言程序的7个步骤和编程机制
    C语言基础-第一个C程序
    C语言基础-简单程序分析
    VS2019编写简单的C程序示例
    简单示例,VS2019调试C语言程序
    C语言基础-基本算法
    C语言基础-数据类型
    C语言中的输入输出函数
    C语言流程控制语句
    C语言数组——一维数组
    C语言数组——二维数组
    C语言数组——字符数组
    C语言中常用的6个字符串处理函数
    精心收集了60个C语言项目源码,分享给大家
    C语言核心技术——函数
    C代码是怎样跑起来的?
    C语言实现字符串的加密和解密
    C语言——文件的基本操作
    使用C语言链表创建学生信息并且将信息打印输出
    图解C语言冒泡排序算法,含代码分析
    实例分析C语言中strlen和sizeof的区别
    开发C语言的3款神器,VS2019、VScode和IntelliJ Clion
    动图图解C语言选择排序算法,含代码分析
    动图图解C语言插入排序算法,含代码分析

    C语言实例专栏(持续更新中…)

    首先来思考一个问题

    什么是指针数组?什么是数组指针?

    在这里插入图片描述

    单从字面上来看似乎很难分清它们是什么,我们先来看看指针数组和数组指针的定义。

    指针数组:数组类型 *数组名[数组长度];

    例:int *parr[5];

    数组指针:类型名 (*指针名)[数组长度];

    例:int (*parr)[5];

    现在我们再来通过上面的定义来分析一下指针数组和数组指针。

    int *parr[5];因为优先级的关系,parr先与[]结合,说明parr是一个数组,然后再与*结合说明数组parr的元素是指向整型数据的指针。元素分别是parr[0],parr[1]...parr[4],相当于定义了5个整形指针变量。所以parr就是数组元素是指针的数组,本质为数组。

    int (*parr)[5];``parr先与*结合,形成一个指针,该指针指向的是有5个整形元素的素组,parr就是指向数组元素地址的指针,本质为指针。

    这下对指针数组和数组指针应该有了初步的了解了吧,接下来我们来通过一段代码进一步了解一下。

    /*
     * @author: 冲哥
     * @date: 2022/4/12
     * @description:数组指针、指针数组
     * @公众号:C语言中文社区
     */
    #include <stdio.h>
    
    int main() {
        int arr[4][4] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };
        int(*p1)[4];   //数组指针
        int* p2[4];    //指针数组
    
        p1 = arr;
        printf("使用数组指针的方式访问二维数组arr\n");
        for (int i = 0; i < 4; ++i) {
            for (int j = 0; j < 4; ++j) {
                printf("arr[%d][%d]=%d\t", i, j, *(*(p1 + i) + j));
            }
            printf("\n");
        }
    
        printf("\n使用指针数组的方式访问二维数组arr\n");
        for (int k = 0; k < 4; ++k) {
            p2[k] = arr[k];
        }
        for (int i = 0; i < 4; ++i) {
            for (int j = 0; j < 4; ++j) {
                printf("arr[%d][%d]=%d\t", i, j, *(p2[i] + j));
            }
            printf("\n");
        }
    
        return 0;
    }
    

    运行结果:
    在这里插入图片描述
    从结果可以看出我们成功的使用数组指针和指针数组的方式访问了二位数组。

    在分析数组指针和指针数组是如何访问二维数组之前,我们通过下面一段代码来学习一下表示二维数组每行起始地址的方式。

    /*
     * @author: 冲哥
     * @date: 2022/4/12
     * @description:数组指针、指针数组
     */
    #include <stdio.h>
    
    int main() {
        int arr[4][4] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };
        for (int i = 0; i < 4; ++i) {
            printf("使用arr+i求得二维数组arr第%d行的起始地址为%d\n", i + 1, arr + i);
            printf("使用arr[i]求得二维数组arr第%d行的起始地址为%d\n", i + 1, arr[i]);
            printf("使用*(arr+i)求得二维数组arr第%d行的起始地址为%d\n", i + 1, *(arr + i));
            printf("使用&arr[i]求得二维数组arr第%d行的起始地址为%d\n", i + 1, &arr[i]);
        }
        return 0;
    }
    

    运行结果:
    在这里插入图片描述
    在上面的代码中,我们使用了4种方式来获得每行的起始地址,因此行起始地址的表示方式并不唯一。

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

    所以,在程序中使用指针数组和数组指针的时候,必须对它们有清晰的认识,要知道它们的本质是什么,以及如何使用。

    参考书籍:C语言进阶:重点、难点与疑点解析

    如果您觉得本篇文章对您有帮助,请转发给更多的人
    C语言中文社区】是一个C语言/C++视频教程、学习笔记、电子书、计算机二级资料等专注于C语言/C++编程学习者的干货知识分享平台,精选深度文章,分享优秀干货类、技能类的学习资源,帮助学习中的你。在这里插入图片描述

    展开全文
  • 文章目录前言一、区分指针数组、数组指针二、区分数组名、&数组名三、字符指针四、函数指针总结 前言 本文将介绍指针数组、数组指针,了解二者的区别。学习数组名、&数组名(取地址数组名)的不同。掌握...


    前言

    本文将介绍指针数组、数组指针,了解二者的区别。学习数组名、&数组名(取地址数组名)的不同。掌握字符指针、函数指针等相关内容。


    一、区分指针数组、数组指针

    我们先来看一个例子:

    //定义如下两个变量
    int *p1[10];
    int (*p2)[10];
    

    如何区分p1、p2是指针数组还是数组指针
    在此之前,我们先了解二者对应的概念。

    (1)指针数组: 简单来讲,指针数组就是一个存放指针的数组
    (2)数组指针:一个能够指向数组的指针
    注意: 对二者的含义可用最后两个字来区分。
    在这里插入图片描述
    对上述实例进行分析:

    int *p1[10];    //指针数组
    
    int (*p2)[10];  //数组指针
    

    注意: [ ]的优先级要高于 * 号,因此,p1会先和[ ]结合,成为数组,该数组存储的元素为指针。
    在这里插入图片描述


    二、区分数组名、&数组名

    定义如下数组:

    int a[10];
    

    a: 数组名,表示数组首元素的地址。
    若对数组名a 取地址,即:&a,则&a代表什么含义?
    下面通过一个例子来说明这个问题:

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

    结果分析如下:
    在这里插入图片描述
    总结:&a 表示的是数组的地址,而非数组首元素的地址。
    &a+1表示整个数组的地址+1,跳过整个数组的大小。


    三、字符指针

    常见的字符指针:char * p;
    (1)使用方式一:

    #include <stdio.h>
    int main()
    {
        char c = 'A';
        char *p = &c;
        printf("%c\n", *p);
        return 0;
    }
    

    结果:
    在这里插入图片描述
    (2)使用方式二:

    #include <stdio.h>
    int main()
    {
        char* p = "hello";
        printf("%s\n", p);
        return 0;
    }
    

    结果分析:
    在这里插入图片描述
    注意以下这个例子:

    #include <stdio.h>
    int main()
    {
        char s1[] = "hahahaha!";
        char s2[] = "hahahaha!";
        char *s3 = "hahahaha!";
        char *s4 = "hahahaha!";
        if(s1 ==s2)
     	printf("s1 =  s2\n");
        else
     	printf("s1 != s2\n");
        if(s3 ==s4)
     	printf("s3 = s4\n");
        else
     	printf("s3 != s4\n");
        return 0;
    }
    

    结果分析:
    在这里插入图片描述


    四、函数指针

    函数指针:用来保存函数地址的指针。
    例如:

    #include <stdio.h>
    void print()
    {
     	printf("hello\n");
    }
    int main()
    {
     printf("%p\n", print);
     printf("%p\n", &print);
     return 0;
    }
    

    如果要讲上述例子中的函数地址用指针保存,就需要用到 函数指针。
    即: void (*print)();

    在这里插入图片描述
    常见的函数指针有:

    int(*fun1)(int,int);
    void(*fun2)(int);
    char(*fun3)();
    

    总结

    以上就是本文的全部内容。

    展开全文
  • 此文件包含C语言指针如何运用的高质量教程,可以让你快速掌握C语言指针的运用。
  • C语言指针数组介绍,定义指针数组,输入输出指针数组 1、什么是指针数组; (1)数组里面的每一个元素不是值而是值,而是指针。 (2)把很多的指针集合在一起,就是一个指针数组 2、定义一个指针数组: ***(p+1) ...
  • 通俗理解数组指针和指针数组 数组指针: eg:int( *arr)[10]; 数组指针通俗理解就是这个数组作为指针,指向某一个变量。 指针数组: eg:int*arr[10]; 指针数组简言之就是存放指针的数组; ——数组并非指针&&指针并非...
  • C语言 指针数组和指向指针的指针

    千次阅读 多人点赞 2019-05-22 16:44:29
    指针数组的概念: 一个数组的元素值为指针则是指针数组指针数组是一组有序的指针的集合。 指针数 组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。 指针数组说明的一般形式为:类型说明符 ...
  • C语言之数组指针、指针数组

    千次阅读 2021-10-20 22:57:41
    文章目录数组和指针问题导引作为函数参数的数组名数组指针:指向数组的指针指针数组:数组元素为指针栈区指针数组 数组和指针 问题导引 指针和数组并不是相等的。为了说明这个概念,请考虑下面两个声明: int a[10];...
  • C语言指针数组初始化

    万次阅读 2019-05-06 09:24:41
    1.char类型的指针 char*names[]={"zhangsan","lisi","wangwu"};//可以这样初始化 这样,每个指针指向对应的字符串 2.其他类型的指针 int*nums[]={1,2,3,4,5};//不可以这样初始化 原因:指针的初始化或赋值...
  • C语言指针数组输出月份

    千次阅读 2018-12-10 21:12:20
    输出月份英文名 ,给出一个1-12整数,返回一个给定月份的英文名称。 函数getmonth应返回存储了n对应的月份英文名称的字符串头指针。如果传入的参数n不是一个代表月份的数字,则返回空指针NULL。
  • 一、定义字符数组和字符指针数组 二、打印指针数据的基地址和指针的指向 三、指针数组的下标指向字符数组,并格式化字符数组的内容 四、打印字符数组的基地址和指针数组的指针指向 五、完整测试代码和效果显示
  • 关于C语言中数组指针、函数指针、指针数组、函数指针数组、指向函数指针数组的指针一直比较绕,稍微整理一下。 到底是指针还是数组? 其实到底是指针还是数组还是看变量名与[]先结合还是*先结合。我们知道C语言中 的...
  • 1功能输入 6 个学生的 5 门课程成绩计算出每个学生的平均分和每门课程的平均 分 2C 语言实现代码 其实就是用二维数组来实现的 二维数组的引用传递使用数组指 针来完成 复制代码 代码如下 : #include <stdio.h>...
  • C语言指针的一些知识点和心得。 i
  • c语言指针数组与指针的指针,认清指针与数组的关系.
  • C语言 指针数组

    2014-03-20 23:01:18
    偏移量始终指向大数组的下一个空闲的元素地址,
  • 目录引例指针数组指针数组存储字符串列表(可回看) 引例 先看一个简单的数组定义并输出数组元素: // 常规的数组定义并输出 #include <stdio.h> const int max = 5; int main(){ int var[]={11,22,33,44,55...
  • #include int main(){ int all[5]; int *putin(); int *p=putin(); for(int k=0;k;k++,p++) printf("%d ",*p);... 代码如上图,输出结果里有数值有地址,无法理解哪里的逻辑有问题,请指教,万分感谢!...
  • ![为什么printf *ptr【k】输出时就什么都打印不出](https://img-ask.csdn.net/upload/201609/03/1472908433_58587.png)
  • 注:windows下的long类型为4字节(跟采用32位gcc或64位gcc无关),跟int相同。unix下long类型为8字节。所以long类型的相关程序不能在vs软件中测试。...按数组类型的长度,从存储器取数,map到数组[0]-[2]各个元素
  • /*括号是必须写的,不然就是指针数组;10是数组的大小*/1拓展:有指针类型元素的数组称为指针数组。2.通过指针引用数组元素的基本方法(1)小标法:a[i]。(2)指针法:* (a+i) 或 * (p+i) 或 p[i]。其中,a是数组名,p...
  • C语言指针数组(数组每个元素都是指针)详解 C语言二维数组指针(指向二维数组的指针)详解 如果一个数组中的所有元素保存的都是指针,那么我们就称它为指针数组。指针数组的定义形式一般为: dataType *arrayName...
  • 详解C语言中Char型指针数组与字符数组的区别 1.char 类型的指针数组:每个元素都指向一个字符串,指向可以改变 char *name[3] = { abc, def, gbk }; for(int i = 0 ; i < strlen(name); i ++){ printf(%s\n,...
  • ![图片说明](https://img-ask.csdn.net/upload/201805/08/1525778822_142150.png) !...!...!...!...想请教各位大佬这几个题中指针所代表的含义 如果能解释一下题目的解题过程就更好了 最近学指针 真的是被它搞得有点晕

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 245,146
精华内容 98,058
关键字:

c语言指针数组