当前位置: 首页 > news >正文

中企动力网站手机版谷歌浏览器入口

中企动力网站,手机版谷歌浏览器入口,网站产品设计规范 模板,九江网站开发文章目录 前言一、数组名的理解二、使用指针访问数组三、一维数组传参本质四、二级指针五、指针数组六、指针数组模拟二维数组 前言 不把指针学的扎实&#xff0c;可不敢说自己C语言基础学的好 一、数组名的理解 #include <stdio.h> int main() {int arr[10] { 1,2,3,4…

在这里插入图片描述

文章目录

  • 前言
  • 一、数组名的理解
  • 二、使用指针访问数组
  • 三、一维数组传参本质
  • 四、二级指针
  • 五、指针数组
  • 六、指针数组模拟二维数组

前言

不把指针学的扎实,可不敢说自己C语言基础学的好

一、数组名的理解

#include <stdio.h>
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };printf("&arr[0] = %p\n", &arr[0]);printf("arr = %p\n", arr);return 0;
}

输出结果

在这里插入图片描述

所以,数组名就是数组第一个元素的地址

数组名就是数组⾸元素(第⼀个元素)的地址是对的,但是有两个例外:
sizeof(数组名),sizeof中单独放数组名,这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩,
单位是字节
&数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素的地址是有区别的)
除此之外,任何地⽅使⽤数组名,数组名都表⽰⾸元素的地址。

#include <stdio.h>
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };printf("&arr[0] = %p\n", &arr[0]);printf("&arr[0]+1 = %p\n", &arr[0] + 1);printf("arr = %p\n", arr);printf("arr+1 = %p\n", arr + 1);printf("&arr = %p\n", &arr);printf("&arr+1 = %p\n", &arr + 1);return 0;
}

输出结果

&arr[0] = 0077F820
&arr[0]+1 = 0077F824
arr = 0077F820
arr+1 = 0077F824
&arr = 0077F820
&arr+1 = 0077F848

这⾥我们发现&arr[0]和&arr[0]+1相差4个字节,arr和arr+1 相差4个字节,是因为&arr[0] 和 arr 都是
⾸元素的地址,+1就是跳过⼀个元素。
但是&arr 和 &arr+1相差40个字节,这就是因为&arr是数组的地址,+1 操作是跳过整个数组的。

二、使用指针访问数组

#include<stdio.h>int main() {int arr[10] = { 0 };int sz = sizeof(arr) / sizeof(arr[0]);int* p = arr;int i = 0;for (i = 0; i < sz; i++) {scanf("%d", p + i);//也可以写成scanf("%d",arr+i);}for (i = 0; i < sz; i++) {printf("%d ", *(p + i));}return 0;
}

本质上p[i] 是等价于 *(p+i),arr[i] 应该等价于 *(arr+i)

三、一维数组传参本质

之前我们都是在函数外部求数组的个数,那如果在函数内部呢?

数组名是数组⾸元素的地址;那么在数组传参的时候,传递的是数组名,也就是说本质上数组传参传递的是数组⾸元素的地址。

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

#include<stdio.h>void test(int arr[]) {printf("%d\n", sizeof(arr));
}void test(int* arr) {printf("%d", sizeof(arr));
}int main() {int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };test(arr);return 0;
}

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

四、二级指针

是变量都有地址

那么,指针变量也是变量,它的地址在哪呢?

存放在二级指针

在这里插入图片描述

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

int b = 20;
*ppa = &b;//等价于 pa = &b;

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

**ppa = 30;
//等价于*pa = 30;
//等价于a = 30;

五、指针数组

指针数组,是一个数组,数组里面每一个元素的类型都是指针类型

在这里插入图片描述

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

六、指针数组模拟二维数组

#include<stdio.h>int main() {int arr1[5] = { 1,2,3,4,5 };int arr2[5] = { 2,3,4,5,6 };int arr3[5] = { 3,4,5,6,7 };int* parr[3] = { arr1,arr2,arr3 };int i = 0;int j = 0;for (i = 0; i < 3; i++) {for (j = 0; j < 5; j++) {printf("%d ", parr[i][j]);//printf("%d", *(*(parr + i) + j));//parr[i][j] == *(*(parr + i) + j);}printf("\n");}return 0;
}

在这里插入图片描述
parr[i]是访问parr数组的元素,parr[i]找到的数组元素指向了整型⼀维数组,parr[i][j]就是整型⼀维数组中的元素。

上述的代码模拟出⼆维数组的效果,实际上并⾮完全是⼆维数组,因为每⼀⾏并⾮是连续的。

在这里插入图片描述

http://www.mnyf.cn/news/42054.html

相关文章:

  • 传统网站与营销型网站搜索引擎网站大全
  • 官方网站建设方案图全网营销推广平台
  • 做网站 先上线再调整厂房网络推广平台
  • 诸暨网站制作设计网络推广运营公司
  • 安徽制作网站yahoo搜索
  • 个人网站可以做淘宝客吗哈尔滨网站优化
  • 郴州网站建设软件定制开发平台深圳百度代理
  • 公众号制作用什么软件安徽seo网络优化师
  • 长沙电子商务网站建设学电脑培训班
  • 学网站开发的软件线上销售怎么做推广
  • 网站建设的经费昆明seo优化
  • 用来做区位分析的地图网站收录网
  • 做私彩网站需注意什么seo的收费标准
  • 南京做网站哪家最好颜色广告
  • 网站开发建设合同范本北京核心词优化市场
  • 珠海网站建设的公司排名宁波网站推广平台效果好
  • 苹果电脑如何做网站短网址在线生成
  • 音乐网站开发参考文献公司官网怎么做
  • 毕业设计做网站起个名字微信小程序开发详细步骤
  • 国内重大新闻10条阳江seo
  • 天猫网站做链接怎么做优化一个网站需要多少钱
  • 做b2b比较好的网站有哪些杭州seo排名公司
  • 政务服务网站建设运行情况seo引擎优化
  • 51个人网站网站排名优化快速
  • 醴陵微信小程序网站开发价格网页推广方案
  • 哈尔滨网站设计哪家好google关键词搜索技巧
  • 天津市建设工程定额网站酒店网络营销推广方式
  • 衡量网站质量的标准手机优化管家
  • 峡江网站建设百度竞价排名公式
  • 如何做免费的网站网站开发培训