【C语言】指针数组和二级指针

您所在的位置:网站首页 c语言中的指针数组 【C语言】指针数组和二级指针

【C语言】指针数组和二级指针

2024-07-07 20:21| 来源: 网络整理| 查看: 265

文章目录

一、指针数组

1.定义

2.案例分析

二、二级指针

(1)指向指针变量的指针

(2)指向指针数组的指针

一、指针数组 1.定义

指针变量也是C语言中的一种变量,因此指针变量也可以构成数组。若一个数组中所有元素都是指针类型,那么这个数组就是指针数组。给数组中每个元素都存放一个地址。

定义一维指针数组语法格式如下:

类型名*  数组名[数组长度];

例如:int* p[5];//定义了一个包含5个整型指针的指针数组

指针数组是一个数组,那么指针数组的数组名是一个地址,它指向数组中第一个元素。

指针数组的数组名实质是一个指向数组的二级指针。

一个单纯的地址没有意义,地址应作为变量的地址存在,所以指针数组中存储的指针应该指向实际的变量。

2.案例分析

假设使用一个字符型的指针数组a,依次存储多个字符串:

"hello world"

"this is a string"

"I am a boy"

该指针数组的定义为:

char* a[3]={"hello world","this is a string","I am a boy"};

数组名指向数组元素,数组元素指向变量,数组名是一个指向指针的指针。

数组名、数组元素、数组元素指针指向的数据之间的逻辑关系如下:

 

二、二级指针

一级指针是一个指向变量的指针,根据该指针找到的数据为普通变量;

二级指针是一个指向指针的指针,根据该指针可以找到指向变量的指针。

根据二级指针中存放的数据,二级指针分为指向指针变量的指针和指向指针数组的指针。

(1)指向指针变量的指针

定义一个指向指针变量的指针,格式如下:

变量类型** 变量名;

例如:

int a=10;    //整型变量a

int* p=&a;  //一级指针p,指向整型变量a

int** q=p;  //二级指针q,指向一级指针p

根据运算符的结合性:上式等价于int* (*q)=p

*q是一个指针变量,而其变量类型为int*表示该变量指向的仍是一个int*的数据。

(2)指向指针数组的指针

假设定义一个指针p,使其指向指针数组a[],定义语句如下:

char *a[3]={0};

char **p=a;

解析:p是指向指针型数据的指针变量,初始时为指针数组a的首元素a[0],a[0]为指针型数据,指向一个char型数组的首元素,而p初值为该元素的地址

案例实现:

#include #include #include int main() { char buf[1024];//定义缓存数组 char* strArray[1024];//定义指针数组 char** pArray;//定义二级指针 int arraylen = 0; printf("录入数据开始:\n"); while (1) { scanf("%s", &buf); if (strcmp(buf, "end") == 0) { printf("数据录入结束\n"); break; } //为指针数组中的指针元素开辟空间 strArray[arraylen] = (char*)malloc(strlen(buf) + 1); //将缓冲区的字符串赋值给指针元素指向的空间 strcpy(strArray[arraylen], buf); arraylen++; } //为二级指针申请len个char*型的存储单元 pArray = (char**)malloc(sizeof(char*) * arraylen); for (int i = 0; i < arraylen; i++) { //为二级指针指向的存储单元一一赋值 *(pArray + i) = strArray[i]; } printf("数据输出:\n"); for (int i = 0; i < arraylen; i++) { printf("%s\n", *(pArray + i)); } //数组指针空间释放 for (int i = 0; i < arraylen; i++) { free(strArray[i]); } //释放二级指针 free(pArray); }

运行结果: 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3