数组名的指针用法

这篇具有很好参考价值的文章主要介绍了数组名的指针用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【题目描述】

读入一些整数,逆序输出到一行中,数中间用空格隔开。已知整数不超过100个。

【样例输入】

94 95 27

【样例输出】

27 95 94

【题目来源】

刘汝佳《算法竞赛入门经典  第2版》程序3-1 逆序输出

【解析】

原书代码:

#include<stdio.h>
#define maxn 105
int a[maxn];
int main(){
    int x, n = 0;
    while(scanf("%d", &x) == 1)
        a[n++] = x;
    for(int i = n-1; i >= 1; i--)
        printf("%d ", a[i]);
    printf("%d\n", a[0]);
    return 0;
}

代码中先是将输入的数赋给一个int型变量x,再将x赋值给数组。其实可以直接将输入的数赋给数组,这就需要用到指针。修改后的代码如下:

#include<stdio.h>
#define maxn 105
int a[maxn];
int main(){
    int n = 0;
    while(scanf("%d", a+n) == 1)
        n++;
    for(int i = n-1; i >= 1; i--)
        printf("%d ", a[i]);
    printf("%d\n", a[0]);
    return 0;
}

因为数组名a起到指向数组首元素的指针的作用,所以可以通过a加上一个自加的n来返回数组各元素的地址,从而将输入的数据直接存入对应的地址中。

根据n++先返回自加前的值,然后再自加的特点,可以将上面的while循环进一步改写如下:

#include<stdio.h>
#define maxn 105
int a[maxn];
int main(){
    int n = 0;
    while(scanf("%d", a+n++) == 1);
    for(int i = n-2; i >= 1; i--)
        printf("%d ", a[i]);
    printf("%d\n", a[0]);
    return 0;
}

注意相比之前的代码,这时n会多自加1次(因为n++写在while语句的循环条件判断中,当输入CTRL+Z结束时,n++又被执行了1次),所以for循环的初始值应改为n-2。

需要特别说明的是,虽然数组名起到指针的作用,但它本质上只是一个常量指针。因为是常量,所以不能改变自己的值,因而改变地址时要用a+n,不能写成a++。

不过,咱们可以创建一个指针,让它指向数组的首元素,再对这个指针进行自加操作,代码如下:

#include<stdio.h>
#define maxn 105
int a[maxn];
int main(){
    int *p = a; //定义指针指向数组首元素
    while(scanf("%d", p++) == 1);
    for(p=p-2; p > a; p--)
        printf("%d ", *p);
    printf("%d\n", *p);
    return 0;
}

必须提醒的是,指针加来加去非常容易出错,所以能不用还是尽量不要用。文章来源地址https://www.toymoban.com/news/detail-852849.html

到了这里,关于数组名的指针用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言 ——指针数组与数组指针

    目录 一、二维数组 二、指针数组 (1)概念  (2)书写方式 (3)指针数组模拟二维数组 三、数组指针 (1)概念 (2)使用数组指针打印一维数组  (3)模拟二维数组的传参 首先,我们要理解一下二维数组和指针变量之间的一些相关概念。 二维数组 : int arr [ 3 ][ 5 ]  

    2024年02月13日
    浏览(50)
  • C语言--指针详解(下)--字符指针、数组指针、指针数组、函数指针、函数指针数组(转移表)

    在C语言中有一种指针类型为字符指针 char*,常用其来表示字符,使用如下: 除了上述用法之外,还可以有以下的用法: 在上面的代码中,字符 \\\" hello word \\\"是常量字符串,将\\\"hello word\\\"放入 pstr 指针的实质是将第一个字符 “ h \\\" 的地址传递给了 pstr ,通过首字符 ” h \\\" 就可以访问

    2024年02月03日
    浏览(51)
  • 【go语言基础】指针数组和数组指针

    (1)指针数组: 存储指针的数组,也叫存储地址的数组,简单说就是存储地址的。 首先它是一个数组,数组中的元素都是指针(地址)。 (2)数组指针: 首先它是一个指针,存储的是指向数组的指针。 (1)指针数组 定义: 注意:首先是一个数组,将数组中的元素定义为

    2024年02月13日
    浏览(53)
  • 【C语言】指针的基本知识详细讲解(指针数组、数组指针、函数指针....

    接着上次的函数的基本知识,今天我们来讲一讲🔍指针 目录 一、指针的概念 二、指针变量 三、野指针 四、字符指针 五、指针与数组 六、指针数组 七、数组指针  八、指针与函数 总结 一、指针的概念 1.1、变量和地址 所谓指针,也就是内存的地址;所谓指针变量,也就是

    2023年04月08日
    浏览(41)
  • C语言:指针和数组(看完拿捏指针和数组)

    目录 数组名的理解: 一维数组:  解析:  字符数组:  解析:   解析: 字符串数组:  解析:   解析:  一级指针:   解析:   解析:  二维数组:  解析:  指针笔试题: 题一:一维数组 题二: 结构体指针 题三: 一维数组 题四: 二维数组 题五: 二维数组 题

    2024年02月11日
    浏览(43)
  • 【C语言基础入门】二级指针、一维数组与指针、二维数组与指针

    在学习C语言的过程中,理解指针的概念是非常重要的。指针提供了一种直接访问内存地址的方式,使得我们可以更加灵活地管理数据和内存。在本文中,我们将介绍C语言中的二级指针、一维数组与指针,并通过通俗易懂的语言和示例代码来帮助读者理解这些概念。 二级指针

    2024年02月05日
    浏览(57)
  • 【C语言】指针进阶:字符指针&&数组指针&&函数指针

    ✨作者:@平凡的人1 ✨专栏:《C语言从0到1》 ✨一句话:凡是过往,皆为序章 ✨说明: 过去无可挽回, 未来可以改变 🌹 感谢您的点赞与关注,同时欢迎各位有空来访我的 🍁平凡舍 回想之前,我们学了 指针 的一些基础👉 指针与结构体 我们知道了指针的概念: 指针就是

    2023年04月08日
    浏览(43)
  • C语言指针用法梳理

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 常见转换说明 %A 浮点数、十六进dao制数字和p-记法(C99) %c 一个字符 %d 有符号十进制整数 %e 浮点数、e-记数法 %E 浮点数、E-记

    2024年01月16日
    浏览(39)
  • C语言:指向数组的指针和指向数组首元素的指针

    相关阅读 C语言 https://blog.csdn.net/weixin_45791458/category_12423166.html?spm=1001.2014.3001.5482         指向数组的指针和指向数组首元素的指针常常被混淆,或者笼统地被称为数组指针,但它们之间是有差别的,本文就将对此进行讨论。         下面的代码首先创建了一个数组,然后创

    2024年02月02日
    浏览(52)
  • 【c语言指针详解】复杂数据结构的指针用法

    目录 一、动态内存分配 1.1 使用malloc和free函数进行内存的动态分配和释放 1.2 内存泄漏和野指针的概念和解决方法 二、复杂数据结构的指针用法 2.1 结构体指针和成员访问操作符 2.2 指针数组和指向指针的指针 2.2.1 指针数组 2.2.2 指向指针的指针 2.3 动态内存分配与结构体

    2024年02月04日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包