游戏自助充值网站怎么做,网站点击软件排名,网站建设源程序代码,wordpress添加下载页#x1f4dd;前言#xff1a; 上篇文章C语言——指针#xff08;二#xff09;中对#xff1a;指针的运算和指针变量类型对指针使用的影响开展了进一步的探讨#xff0c;这篇文章我们继续学习一下指针与一维数组之间的关系#xff1a; 1#xff0c;对数组名的理解 2前言 上篇文章C语言——指针二中对指针的运算和指针变量类型对指针使用的影响开展了进一步的探讨这篇文章我们继续学习一下指针与一维数组之间的关系 1对数组名的理解 2指针与一维数组 个人简介努力学习ing 个人专栏C语言入门基础 CSDN主页 愚润求学 每日鸡汤“海压竹枝低复举风吹山角晦还明” 文章目录 一对数组名的理解二指针与一维数组1一维数组传参的本质2指针访问一维数组1用指针变量和指针运算符2用指向数组的指针变量的移动 一对数组名的理解
取地操作符相信大家都不陌生例如
int arr[5]{1,2,3,4,5};
int*p arr[0]; //这里我们通过arr[0]拿到了数组第一个元素的地址但是数组名arr其实本来就是地址它代表的是数组首元素的地址。 我们做个测试运行下面代码观察结果
int main()
{int arr[0] { 1,2,3,4,5 };printf(arr[0] %p\n, arr[0]); //%p是专门用来打印地址的printf(arr %p\n, arr);return 0;
}我们可以发现数组名打印出来的结果与ar[0]一致这就是因为 数组名arr代表的是数组首元素的地址。 但是在下面两个情况下数组名表示整个数组 1sizeof(数组名) 当数组名单独放在sizeof里面时这里的数组名表示的是整个数组。 2数组名 当数组名和相结合时这里的数组名表示的是整个数组取出的是整个数组的地址。 不妨看下面的测试 测试一sizeof(数组名) 输出结果是20就是因为这里的arr表示的是整个数组sizeof计算了整个数组的大小一共5个元素每个元素是int类型所以5*420。
测试二数组名 输出结果
我们发现arr与arr输出的结果是一样的但是arr1跳过了4个字节arr1却跳过了20个字节这是因为 arr中的arr表示的是整个数组取出的是整个数组的地址指针的类型是数组指针因此1就会一下子跳过整个数组也就是20个字节上一讲说到的指针类型会影响指针±整数所跳过的字节数。
总结 sizeof数组名和 数组名中数组名表示的整个数组。 除两个特例外其他情况下的数组名都表示数组首元素的地址。
二指针与一维数组
在前面学习的基础上我们再来看看数组与指针间的奇妙联系
1一维数组传参的本质
假如我们创造一个函数test企图用test来实现在函数内部计算数组元素的个数如下图 输出结果 我们发现sz2的结果并不是我们想要的数组的元素的个数。 为什么同样一段用于计算数组元素个数的代码在函数外部能实现到了函数内部求数组元素个数就不行了呢 这是因为 数组名是数组首元素的地址我们在传参时传递的是数组名传递的是首元素的地址。 也就是说test函数中sizeof(arr)/sizeof(arr[0])中的sizeofarr实现的其实是计算首元素的地址的大小sizeofarr[0]计算的是数组首元素的大小因为我所使用的是x86环境地址的大小是4个字节所以4/4得到了1。
总结本质上一维数组传参传递的是数组首元素的地址。 void test(int arr[]) 参数上写成数组的形式本质上还是指针 参数 int arr[] int* arr (形式不同本质相同) 2指针访问一维数组
下面举例
1用指针变量和指针运算符
我们可以用指针变量和指针运算符实现访问数组 如下用指针变量输入输出各数组的元素
int main()
{int i, a[5], * p a;//输入for (i 0; i 5; i){scanf(%d, p i);}printf(\n);//输出for (i 0; i 5; i){printf(%4d, *(a i));}printf(\n);return 0;
}当我们输入1 2 3 4 5结果如下 当我们输入时随着i的变化pi所代表的地址也在变化从而不断后移到数组其他元素的地址
2用指向数组的指针变量的移动
int main()
{int i, a[5], * p a;for (i 0; i 5; i){scanf(%d,p);}printf(\n);p a;for (i 0; i 5; i){printf(%4d, *p);}printf(\n);return 0;
}当我们输入1 2 3 4 5时结果如下 这里是通过p指针变量自身的移动来实现访问数组中不同地址的元素 ●注意printf(“%4d”, *p);中 *p 的作用是先输出指针指向的变量的值然后指针变量加1 我的分享也就到此结束啦 要是我的分享也能对你的学习起到帮助那简直是太酷啦 若有不足还请大家多多指正我们一起学习交流 公主王子点赞→收藏⭐→关注 感谢大家的观看和支持祝大家都能得偿所愿天天开心