首页 > 其他分享 >C语言指针的进阶理解——指针数组

C语言指针的进阶理解——指针数组

时间:2024-09-03 12:25:10浏览次数:11  
标签:arr 进阶 int 元素 C语言 arr3 数组 指针

	//整型数组
	//顾名思义是存放整型类型的元素的数组
	int arr1[] = { 1,2,3,4,5 };//arr内元素的类型是int

	//字符数组
	//顾名思义是存放字符类型元素的数组
	char arr2[] = { 'a','b','c' };//arr内元素的类型是char

那么指针数组你是不是也能推算出来它大概的模样了,差不多就涨这样对吧

arr3[]= {'0x00cffdd0','0x00cffdc4','0x00cffcec'}

先明确一个概念,数组是一组相同类型元素的集合

那么arr3的具体类型是什么呢?

所以你存放元素地址指向的是int,那么你的指针数组的类型就是int*。如果存放地址指向的是char,那么你的指针数组的类型就是char*。注意指向不同类型元素的地址不能混合在一起放到同一个指针数组内。

弄清这一点现在就能很清晰明了的看懂以下代码了吧

int main()
{
	int a = 10;
	int b = 20;
	int c = 30;
	int* arr[] = {&a,&b,&c};//变量abc内存放的都是int类型的数据
	
	for (int i = 0; i < 3; i++)
	{
		printf("%d ", *(arr[i]));//把arr单个元素提出来,再解引用
	}
	return 0;
}

 这时候有人就要说那二维数组呢?

那我们现在就用指针数组来模拟一个二维数组

	int arr1[] = { 1,2,3,4,5 };
	int arr2[] = { 11,22,33,44,55 };
	int arr3[] = { 111,222,333,444,555 };

	arr = { arr1,arr2,arr3 }//数组名等于首元素地址

那么在这里arr是什么类型的?

    int arr1[5] = { 1,2,3,4,5 };
	int arr2[5] = { 11,22,33,44,55 };
	int arr3[5] = { 111,222,333,444,555 };

	int* arr[] = {arr1, arr2, arr3};//数组名等于首元素地址

这是不是就很相似了arr里面放着三个地址,这三个地址都指向int类型的元素,并且都是各自数组的首元素。

int main()
{
	int arr1[5] = { 1,2,3,4,5 };
	int arr2[5] = { 11,22,33,44,55 };
	int arr3[5] = { 111,222,333,444,555 };

	int* arr[] = {arr1, arr2, arr3};//数组名等于首元素地址

	int i = 0;
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 5; j++)
		{
			printf("%d ", arr[i][j]);//跟使用二维数组的方法一样
		}                            //但本质还是指针数组调用
		printf("\n");
	}
	return 0;
}

通过这次对二维数组的模拟,是不是对指针数组有了更好的理解,并且也更多元的掌握了指针数组的用法 

标签:arr,进阶,int,元素,C语言,arr3,数组,指针
From: https://blog.csdn.net/CPP_ZhouXuyang/article/details/141825046

相关文章

  • 学习C语言之分支与循环(上)桀桀桀
     晚上好各位,桀桀桀。上面就是我们今天的内容了话不多说,开干。    <一>、if语句1.if语句的语法形式如下:if(表达式) 语句表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏。在C语⾔中,0为假,⾮0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式......
  • 《JavaEE进阶》----9.<SpringMVC实践项目:【简易对话留言板(数据存在数据库中)】>
    本篇博客讲解设计的一个网页版简易对话留言板。这个是将数据存在数据库中。我们通过链接本地数据库。在这里面存入的数据。此时数据存在在硬盘中,只要数据不被删除,硬盘不损坏。那么这些数据就会被永久保存引入的依赖:配置数据库:spring:datasource:#数据库连接配置......
  • C语言程序设计(初识C语言后部分)
    世间风物论自由,喜一生我有,共四海丰收。12.表达式求值表达式求值的顺序一部分是由操作符的优先级和结合性决定。同样,有些表达式的操作符在求职过程中需要转换为其它类型。1)隐式类型转换C的整型算术运算总是至少以缺省(默认)整型类型的精度来进行的。为了获得这个精度,表达......
  • C语言程序设计-扫雷游戏
    愿你我成功会师,翻过雪山,走过草地,不远万里。扫雷游戏game.h#pragmaonce#include<stdio.h>#include<time.h>#include<stdlib.h>#defineROW9#defineCOL9#defineROWSROW+2#defineCOLSCOL+2#defineEASY_COUNT10voidInitBoard(charboard[ROWS][C......
  • C语言数字炸弹
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、游戏规则二、游戏制作1、游戏代码2、过程思考总结前言浅学了一点C语言,想试着做一个猜数字小游戏,类似于我们小时候玩过的“数字炸弹”。一、游戏规则随机生成一个1-100的数,玩家可......
  • C语言:大小端模式、判断大小端、大小端转换
    目录1.什么是大端和小端2.为什么会存在大小端的问题3.判断主机字节序(主机大小端)3.1使用联合体(union)3.2使用指针3.3强制转为char类型法4.大小端转换1.什么是大端和小端对于一个存储空间大于1个字节的数据,在内存中有两种存储模式,大端模式(big-end......
  • C语言_扫雷
    引言:当我们C语言学习完数组的时候,可以尝试一些小的游戏来提升自己,比如下面的这个扫雷。玩法介绍:我们需要在棋盘中选中地雷以外的安全区域,直到最后剩下全部的地雷为止,即可获胜。技能要求:分支语句以及循环语句、函数、数组。接下来我将创建三个文件:具备函数声明、宏定义、......
  • 常量指针与指针常量
    1.常量指针当const修饰指针时,我们称其为常量指针特点:指针指向地址可以改,指针指向的值不可更改语法:const数据类型*指针变量名记忆方法:常量指针为常量的指针,重点在常量上,常量为不可更改的值,但地址可改例子inta=10;intb=10;constint*p=&a;//指针指向的值不......
  • 【Java】—— Java面向对象进阶:Java中的账户管理-基础账户与可透支账户的实现与测试
    目录1.基础账户类(Account)2.测试基础账户类3.可透支账户类(CheckAccount)4.测试可透支账户类运行结果1.基础账户类(Account)        写一个名为Account的类模拟账户。该类的属性和方法如下图所示。该类包括的属性:账号id,余额balance,年利率annualInterestRate;......
  • c语言编译器IDE的6键钢琴程序代码
    #include<stdio.h>#include<SDL2/SDL.h>#include<SDL2/SDL_mixer.h>//FunctionforloadingmusictoMix_MusicstaticMix_Music*loadMusic(constchar*path){Mix_Music*music=Mix_LoadMUS(path);if(music==NULL){fprintf(stderr,“M......