C语言指针数组

article/2025/9/22 3:15:01

一、指针数组概念回顾:

          一个数组,其元素均为指针类型数据,称为指针数组。即:指针数组中每一个元素都是指针变量

指针数组的定义格式:

类型标识符 *数组名(数字长度说明);

如:

        int *p[4];   //每个数组元素都可以看成是一个指针变量,都可以指向 一个整型普通变量。

       数组指针:int (*p)[4];     //这是指向一维数组的指针变量,也就是说,他首先是一个指针变量。

例题:

#include<stdio.h>int main()
{char *pName[]={"C++","JAVA","PYTHON","GO","CSHarp"};  //指针数组int is1=sizeof(pName);   //每个指针变量占4个字节,所以有五个元素一共占20个字节int isize=is1/sizeof(pName[0]);   //20/4=5,表示pName中有5个元素,pName能引用的下标就是[0]-[4]int i;char *p2="JAVA";   //把字符串的首地址赋值给指针;字符串常量会固定分配地址;p2=pName[1]for(i=0;i<isize;i++){printf("pName[%d]=%s\n",i,pName[i]);}printf("----------------------------------\n");char *ptemp;ptemp=pName[0];   //ptemp指向了"C++"pName[0]=pName[1];  //pName[0]指向了"JAVA"pName[1]=ptemp;     //pName[1]指向了"C++"/*ptemp保存了"C++"的地址,然后pName[1]保存了"JAVA"的地址,最后再把"C++"的地址给pName[2].*/for(i=0;i<isize;i++){printf("pName[%d]=%s\n",i,pName[i]);}printf("----------------------------------\n");return 0;
}

二、指向指针的指针
用来指向指针变量 的变量,简称:指向指针的指针。
char **p;    //定义了一个 指向  字符串指针变量的  指针变量
int **p;       //定义了一个 指向  整型指针变量的  指针变量
*(*p);   //表示  指针变量p  是  指向一个  指针变量,*p 是 p  所指向的 指针变量。

接上方代码char **pp;   //定义一个指向指针的指针pp=&pName[0];   //*pp就是pp所指向的指针,也就是pName[0];printf("pp=%s\n",*pp);printf("----------------------------------\n");int abc=5;int *pabc=&abc;   //指向 整型数据的指针  *pabc保存的是 abc的地址int **ppabc=&pabc;   //指向 指针的指针   **ppabc保存的是 [*pabc保存的地址(就是abc的地址)]printf("abc=%d\n",abc);printf("abc=%d\n",*pabc);printf("abc=%d\n",**ppabc);  //*ppabc 等价于 pabc,所以 **ppabc 等价于 abcreturn 0;
}

三、指针数组做main函数形参
指针数组有个重要应用:
第一种传递形参的方法:

 第一种方法:

int main(int arge,char *argv[])  //int arge:整型形参  应该是argv指针数组的元素个数                                 //char *argv[]:指针数组做函数形参argv[0]保存的是 当前可执行文件的完整路径文件 名;可以接收不确定参数个数
{    int i;    
printf("argc=%d\n",arge);   //我们输入的参数个数 +1    
for(i=0;i<arge;i++)   {        printf("argv[%d]=%s\n",i,argv[i]);        //等价于上面一条代码        printf("argv[%d]=%s\n",i,*argv);       argv++;    }   printf("-------\n");    
return 0;}

第二种传递形参的方法(使用命令行):
四、本章小结
1、指针数据类型小结表
2、指针运算小结
① 指针变量的 加减
p++;p--
int *p;  1000;1004
②指针变量的 赋值
int *p =1000; //这样是 不可以的,不能直接赋予数字,不要认为可以将地址赋值给p,只能够将变量的已经分配的地址赋值给指针变量。
int a;
int *p=&a;  //只可以这样
③指针变量 可以为空值表示不指向任何变量
int *p=NULL;  //NULL就是整数0,就是使p指向地址为0的单元;
//系统会保证地址为0这个单元不存放有效数据
if(p==NULL)
{
//p=&a;
}
3、void  *型指针:万能型指针变量,也就是 能够指向任意数据类型
int a=3;
int *p=&a;
float bf=56.f;
float *pg=&bf;
void *pwn=NULL;
pwn=p;   //可以把整型变量的地址赋值给万能型指针变量
pwn=pf;   //这个也可以把上面bf的地址赋值给他
pf=(float *)pwn;  //这里把pwn的地址赋值回给pf必须强制类型转换
4、总结
指针的优点: 效率高
指针的缺点: 太过灵活


http://chatgpt.dhexx.cn/article/8IwlUref.shtml

相关文章

指针数组概念

一个数组&#xff0c;其元素均为指针类型数据&#xff0c;称为指针数组。 即&#xff1a;指针数组中每一个元素都是指针变量。 指针数组的定义格式: 类型标识符 *数组名(数字长度说明); 如&#xff1a; int *p[4]; //每个数组元素都可以看成是一个指针变量&#xff0c;都可…

数组指针与指针数组

一、数组指针 数组指针&#xff0c;即是指向数组的指针&#xff0c;数组指针中存放的应该是数组的地址。 1. 数组名的区分 数组名&#xff1a;数组名就是数组的最大存储单元的首地址&#xff0c;指向第一个元素&#xff0c;所以数组名的类型为元素类型的指针 &数组名[0]&…

c++指针数组(入门)

指针数组的本质是数组&#xff0c;只是每个数组的元素为指针 32位平台&#xff1a; char*arr1[4]; int *arr2[4]; short *arr3[4];sizeof(arr1)168; sizeof(arr2)168; sizeof(arr3)168; 8.4.1 数值的指针数组 int *arr[4]; 指针数组 int *arr[4]{&num1,&num2,&…

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

指针数组、数组指针、数组的区别与联系&#xff01; 一&#xff1a;基本定义 1.指针数组 char *arr[4] {"hello", "world", "shannxi", "xian"}; //arr就是我定义的一个指针数组&#xff0c;它有四个元素&#xff0c;每个元素是一…

指针数组的用法

指针数组 1、学习目标 掌握指针数组的用法总结与思考 2、指针数组 所谓指针数组是指由若干个具有相同存储类型和数据类型的指针变量构成的集合。 指针数组的一般说明形式&#xff1a; <存储类型> <数据类型> *<指针数组名> [<大小>]指针数组名表示…

数组指针 和 指针数组 的区别

目录 0. 引言1. 数组指针2. 指针数组3. 小结 本文使用运行环境如下&#xff1a; 操作系统&#xff1a;Ubuntu Linux 18.04 64 bit 编译环境&#xff1a;gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04) 0. 引言 数组指针和指针数组且听之类似&#xff0c;实际完全不同。数组…

C语言(函数指针数组)详解

要了解函数指针数组&#xff0c;可以从三个角度来分析。所谓函数指针数组&#xff0c;从字面意思上来解析&#xff0c;函数指针数组的组成有三个点&#xff0c;函数&#xff0c;指针&#xff0c;数组。首先我们知道&#xff0c;函数指针数组&#xff0c;是一个数组&#xff0c;…

c语言 指针数组

文章目录 前言一、指针数组的定义声明,赋值&#xff1a;二、指针数组的应用&#xff1a;总结 前言 今天我们讲解一下什么是指针数组。 一、指针数组的定义声明,赋值&#xff1a; 什么是指针数组呢&#xff1f; 指针数组 &#xff1a;就是首先定义一个数组&#xff0c;数组里面…

c语言之——指针数组与数组指针

一、指针数组和数组指针的定义 1. 指针数组&#xff1a;是指一个数组里面装着指针&#xff0c;也即指针数组是一个数组&#xff1b; 定义形式&#xff1a;int *a[10]&#xff1b; 说明&#xff1a;[]的优先级高于*&#xff0c;该定义形式应该理解为&#xff1a;int * (a[10]…

关于指针数组与数组指针详解(知识点全面)

1.目录 1.指针数组 2.数组指针 2.它们的区别 1.指针数组 如果一个数组中的所有元素保存的都是指针&#xff0c;那么我们就称它为指针数组。其一般形式为&#xff1a; 数据类型 *数组名[常量表达式][常量表达式]...... ; 它是一个数组&#xff0c;数组的元素都是指针&…

指针数组(指针类型的数组)

顾名思义&#xff1a;指针类型的数组&#xff0c;首先是一个数组&#xff0c;数组元素存储的是指针。(中国的修饰词往往都在前面&#xff0c;而西方修饰词往往是放在后面) 语法如下&#xff1a; 目标类型 数组名称[元素个数] 如&#xff1a;int * p[3] 数组p有3个元素&#x…

数组指针和指针数组的区别

文章目录 前言 一、什么是指针数组&#xff1f; 1.定义 2.声明 3.指针数组的内存示意图 二、什么是数组指针&#xff1f; 1.定义 2.声明 3.内存示意图 三、如何区别指针数组和数组指针&#xff1f; 四、实践理解 总结 前言 这几天老师有问到指针数组和数组指针的区别&#xff…

C语言—指针数组与数组指针

前言&#xff1a; 看到标题的小伙伴可能会有点疑惑&#xff0c;什么是指针数组&#xff0c;数组指针&#xff1f;&#xff1f;傻傻分不清楚&#xff0c;不怕&#xff0c;听我慢慢道来。 正文&#xff1a; 要想弄清楚这两个概念&#xff0c;我们不妨举几个例子&#xff1a; …

指针数组和数组指针的区别及其详解

引言 对于指针数组和数组指针的概念&#xff0c;相信很多人经常会感到迷惑&#xff0c;见到二者一时不能分辨究竟对应哪一个才是对的。接下来我们来分析一下二者区别。 我们来看一下这个示例代码&#xff1a; int *ptr1[10]; int (*ptr2)[10];对于上述代码语句&#xff0c;你…

C语言学习—数组指针和指针数组的区别

前言 本文章对指针数组和数组指针的区别进行了分析介绍 一、数组指针和指针数组的定义 1.数组指针&#xff1a;定义 int (*p)[n]; 由于()的优先级高&#xff0c;首先说明p是一个int类型指针&#xff0c;它是指向一个整型(int)的一维数组&#xff0c;这个一维数组的长度是n&a…

指针数组和数组指针

1.什么是指针数组和数组指针 顾名思义&#xff1a;指针数组是“存放指针的数组”&#xff0c;这个变量是一个数组&#xff0c;用指针修饰&#xff0c;数组中的每个元素都是指针。 数组指针是“指向数组的指针”&#xff0c;这个变量是一个指针&#xff0c;用数组修饰&#xf…

指针数组和数组指针(非常易懂)

指针数组与数组指针 目录&#xff1a; 1.指针与一维数组 2.指针与二维数组 3.指针数组与数组指针 1.指针与一维数组 当定义一个一维数组时&#xff0c;系统会在内存中为改数组分配一个储存空间&#xff0c;其数组的变量名就是数组的首地址。若定义一个指针变量&#xff0c;并…

数组指针和指针数组

首先&#xff0c;理解一下数组指针和指针数组这两个名词&#xff1a; “数组指针”和“指针数组”&#xff0c;只要在名词中间加上“的”字&#xff0c;就知道中心了—— 数组的指针&#xff1a;是一个指针&#xff0c;什么样的指针呢&#xff1f;指向数组的指针。 指针的数…

如何下载风云卫星数据?

如何下载风云卫星数据&#xff1f; 这个是下载风云数据的网址&#xff1a; http://satellite.nsmc.org.cn/PortalSite/Data/Satellite.aspx 1.查找数据 步骤见如图1&#xff1a; 2.选择数据 选择“搜索”以后就就出现图2这个页面&#xff1a;文件名如果被省略了&#xff0…

总结部分SAR卫星及其参数以及SAR卫星发展的趋势

总结国内外失效、在轨和未来发射的SAR卫星及其参数 国内的SAR卫星及其参数 1、高分三号卫星 高分三号卫星(GF-3)于2016年8月10日成功发射&#xff0c;是我国首颗分辨率达到1米的C频段多极化合成孔径雷达(SAR)卫星&#xff0c;自然资源部为其主用户。 GF-3星的分辨率可以达到…