首页 > 其他分享 >认识认识指针(2)

认识认识指针(2)

时间:2024-05-25 20:04:16浏览次数:21  
标签:arr 认识 地址 int 数组名 数组 指针

1. 数组名的理解

数组名和数组⾸元素的地址打印出的结果⼀模⼀样,数组名就是数组⾸元素(第⼀个元素)的地址。

其实数组名就是数组⾸元素(第⼀个元素)的地址是对的,但是有两个例外:

• sizeof(数组名),sizeof中单独放数组名,这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩, 单位是字节

• &数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素 的地址是有区别的) 除此之外,任何地⽅使⽤数组名,数组名都表⽰⾸元素的地址。

2. 使⽤指针访问数组

有了前⾯知识的⽀持,再结合数组的特点,我们就可以很⽅便的使⽤指针访问数组了。

int main()

{ int arr[10] = {0}; //输⼊ int i = 0; int sz = sizeof(arr)/sizeof(arr[0]); //输⼊ int* p = arr;

for(i=0; iscanf("%d", p+i); //scanf("%d", arr+i);//也可以这样写 } //输出

for(i=0; iprintf("%d ", p[i]); } return 0; }

3. ⼀维数组传参的本质

数组名是数组⾸元素的地址;那么在数组传参的时候,传递的是数组名,也就是说本质上数组传参本质上传递的是数组⾸元素的地址。所以函数形参的部分理论上应该使⽤指针变量来接收⾸元素的地址。那么在函数内部我们写 sizeof(arr) 计算的是⼀个地址的⼤⼩(单位字节)⽽不是数组的⼤⼩(单位字节)。正是因为函 数的参数部分是本质是指针,所以在函数内部是没办法求的数组元素个数的。

总结:⼀维数组传参,形参的部分可以写成数组的形式,也可以写成指针的形式。

4. 冒泡排序

冒泡排序的核⼼思想就是:两两相邻的元素进⾏⽐较。

void bubble_sort(int arr[], int sz)//参数接收数组元素个数

{ int i = 0; for(i=0; i-1; i++) { int flag = 1;//假设这⼀趟已经有序了

int j = 0;

for(j=0; j-1; j++) { if(arr[j] > arr[j+1]) { flag = 0;//发⽣交换就说明,⽆序

int tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; } }

if(flag == 1)//这⼀趟没交换就说明已经有序,后续⽆序排序了 break; } }

int main()

{ int arr[] = {3,1,7,5,8,9,0,2,4,6}; int sz = sizeof(arr)/sizeof(arr[0]);

bubble_sort(arr, sz); for(i=0; iprintf("%d ", arr[i]); } return 0; }

5. ⼆级指针

指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪⾥?这就是 ⼆级指针 。

int mian(){int a =10; int *pa = &a; int **ppa = &pa; return 0;}

*ppa 通过对ppa中的地址进⾏解引⽤,这样找到的是 pa , *ppa 其实访问的就是 pa .

**ppa 先通过 *ppa 找到 pa ,然后对 pa 进⾏解引⽤操作: *pa ,那找到的是 a .

6. 指针数组

指针数组是指针还是数组? 我们类⽐⼀下,整型数组,是存放整型的数组,字符数组是存放字符的数组。 那指针数组呢?是存放指针的数组.

指针数组的每个元素都是⽤来存放地址(指针)的。

指针数组的每个元素是地址,⼜可以指向⼀块区域。

7. 指针数组模拟⼆维数组

int main()

{ int arr1[] = {1,2,3,4,5}; int arr2[] = {2,3,4,5,6}; int arr3[] = {3,4,5,6,7};

//数组名是数组⾸元素的地址,类型是int*的,就可以存放在parr数组中

int* parr[3] = {arr1, arr2, arr3}; int i = 0; int j = 0;

for(i=0; i3; i++) { for(j=0; j5; j++) { printf("%d ", parr[i][j]); } printf("\n"); }return 0; }

parr[i]是访问parr数组的元素,parr[i]找到的数组元素指向了整型⼀维数组,parr[i][j]就是整型⼀维数 组中的元素。 上述的代码模拟出⼆维数组的效果,实际上并⾮完全是⼆维数组,因为每⼀⾏并⾮是连续的。

标签:arr,认识,地址,int,数组名,数组,指针
From: https://blog.csdn.net/2401_83575662/article/details/139202434

相关文章

  • 初识指针(1)
    1.内存和地址1.1内存把内存划分为⼀个个的内存单元,每个内存单元的⼤⼩取1个字节。计算机中常⻅的单位(补充):⼀个⽐特位可以存储⼀个2进制的位1或者0。1byte=8bit1KB=1024byte1MB=1024KB1GB=1024MB1TB=1024GB1PB=1024TB其中,每个内存单元,相当于⼀个学⽣宿......
  • C++入门(3) 指针和引用的区别|引用的本质|引用小结|inline函数|缺省函数
    一,引用引用和指针的区别1,从语法规则上讲指针变量存储某个实例(变量或者对象)的地址;引用是某个实例的别名程序为指针变量分配内存空间;不为引用分配内存空间指针变量的值可以改变;引用一旦初始化就无法改变指针变量可以为NULL;但是没有空引用指针作为形参需要判断是否为空;引用......
  • 探索c语言:深入了解指针
    1.内存和地址1.1内存和地址1.1内存我们可以通过一个小案例来了了解:假设有一栋宿舍楼,把你放在楼里,楼上有100个房间号,但房间里没有编号,刚好你的一个朋友找你玩,如果想要找到你就得挨个房间找,这样子效率很低,但是如果我们根据楼层和楼层的房间号的情况,给每个房间编上号,如: 1......
  • 030 指针学习—指针定义与指针变量
    目录1指针定义(1)指针(2)存储单元的地址和存储单元的内容(3)指针访问形式(4)注意事项2指针变量(1)定义(2)一般形式(3)引用指针(4)函数参数——指针(5)注意事项1指针定义(1)指针        指针是一个变量,其值为另一个变量的地址。通过指针,你可以直接访问和操作存储在内存中......
  • 人生小思考--认识一个朋友 爱自己是终身浪漫的开始 做事工作学会乐在其中
    人生小思考--认识一个朋友  爱自己是终身浪漫的开始。 做事工作学会乐在其中。1)关注让自己变好的事情。2)关注让自己舒适的事情,人关系和事情。3)关注让自己健康的事情。学会夸奖别人。你好可爱!优秀!真棒!明白,不明白。不知道,知道了。懂了。不懂。别钻牛角尖。跳出来,做好当下......
  • 认识NXP新型微处理器:MCX工业和物联网微控制器
    目录概述1 MCX工业和物联网微控制器介绍2 MCX系列微控制器类型2.1 MCXN系列微控制器2.1.1主要特征2.1.2MCXN系列产品2.1.3 MCXN9xx和N5xxMCU选型表2.2 MCXA系列微控制器 2.2.1主要特征2.2.2 MCXA系列产品2.2.3 MCXAMCU的架构2.3  MCXW系列......
  • 双指针(Two Pointers)
    双指针顾名思义,就是同时使用两个指针,在序列、链表结构上指向的是位置,在树、图结构中指向的是节点,通过或同向移动,或相向移动来维护、统计信息。如果不和其他数据结构结合使用,双指针维护区间信息的最简单模式就是维护具有一定单调性,新增和删去一个元素都很方便处理的信息,就比如......
  • 【AI学习】对LLM训练中数据处理的再认识
    最近读了几篇文章,对于LLM模型中的数据处理,有了一些再认识。这几篇文章分别是《世界顶级风投a16z创始人对谈AI与创业》、《BenThompson对NatFriedman和DanielGross的采访》、《AI教父Hinton最新万字精彩访谈:直觉,AI创新的洞见和思考,未来》有一些观点:1、训练模型的数......
  • 实验5 C语言指针应用编程
    1.实验任务1task1_1.c1#include<stdio.h>2#defineN534voidinput(intx[],intn);5voidoutput(intx[],intn);6voidfind_min_max(intx[],intn,int*pmin,int*pmax);78intmain()9{10inta[N];11intmin,max;1213......
  • 类的数组,数组指针,指针数组
    在C++中,类的数组、类的数组指针和类的指针数组是三种不同的数据结构,它们各自有不同的用途和特性。下面我将分别给出它们的示例和说明。1.类的数组类的数组是类的多个对象的集合,这些对象在内存中连续存储。cpp复制代码classMyClass{public:intvalue;MyClass(intv)......