文档章节

学点 C 语言(21): 数据类型 - 数组与指针

涂孟超
 涂孟超
发布于 2014/09/26 15:34
字数 486
阅读 6
收藏 0
点赞 0
评论 0

1. 获取数组的地址无须 &, 因为数组名本身就是个地址
#include <stdio.h>

int main(void)
{
    char c = 'A';
    char cs[] = "ABC";

    printf("%c, %s\n", c, cs);           /* 获取字符及字符数组的内容 */
    printf("%p, %p, %p\n", &c, cs, &cs); /* 获取字符及字符数组的地址, cs 与 &cs 没有区别*/

    getchar();
    return 0;
}

 
 
 
 
 

 

 

  

2. 数组元素的地址是连续的:
#include <stdio.h>

int main(void)
{
    char cs[] = "ABC";

    printf("%p\n%p\n%p\n%p\n", cs, &cs[0], &cs[1], &cs[2]);

    getchar();
    return 0;
}

 
 
 
 
 

 

 

  

3. 数组名所代表的地址就是第一个元素的地址:
#include <stdio.h>

int main(void)
{
    char str[] = "ABC";
    char *p1 = str;
    char *p2 = &str[0];

    printf("%p, %p\n", p1, p2);

    getchar();
    return 0;
}

 
 
 
 
 

 

 

  

4. 通过指针访问数组元素:
#include <stdio.h>

int main(void)
{
    char str[] = "ABC";
    char *p = str;

    printf("%c\n", *p);
    printf("%c\n", *p+1);
    printf("%c\n", *p+2);

    printf("\n");
    
    printf("%c\n", *p);
    printf("%c\n", *++p);
    printf("%c\n", *++p);

    getchar();
    return 0;
}

 
 
 
 
 

 

 

  

5. 通过指针遍历数组:
#include <stdio.h>

int main(void)
{
    char str[] = "123456789";
    char *p = str;

    int i;
    for (i = 0; i < sizeof str/sizeof str[0]; i++) {
        printf("%c\n", *p);
        p++;
    }

    getchar();
    return 0;
}

 
 
 
 
 

 

 

  
#include <stdio.h>

int main(void)
{
    char str[] = "123456789";
    char *p = str;

    while (*p != '\0') {
        printf("%c\n", *p);
        p++;
    }

    getchar();
    return 0;
}

 
 
 
 
 

 

 

  
#include <stdio.h>
#include <string.h>

int main(void)
{
    char str[] = "123456789";
    char *p = str;

    int i;
    for (i = 0; i < strlen(str); i++) {
        printf("%c\n", *(p+i));
    }

    getchar();
    return 0;
}

 
 
 
 
 

 

 

  
#include <stdio.h>

int main(void)
{
    int nums[] = {111,222,333,444};
    int *p = nums;

    int i;
    for (i = 0; i < sizeof nums / sizeof nums[0]; i++) {
        printf("%d\n", *p++);
    }

    getchar();
    return 0;
}

 
 
 
 
 

 

 

  

6. 注意: 指针+1 是根据元素大小移动一个位置
#include <stdio.h>

int main(void)
{
    int nums[] = {111,222,333,444};
    int *p = nums;

    int i;
    printf("%d\n", *p);
    printf("%d\n", *(p+1));

    printf("%d\n", *p+1);  /* 不是这样; 这是代表取值后再 + 1 */
    
    getchar();
    return 0;
}

 
 
 
 
 

 

 

  

7. 上面的指针其实都是数组元素的指针, 如何声明真正的数组指针呢?
#include <stdio.h>

int main(void)
{
    int nums[4] = {111,222,333,444};
    int (*p)[4] = &nums;      /* 注意其中的小括号 */

    printf("%d\n", (*p)[1]);  /* 用起来并不方便   */
    printf("%d\n", (*p)[2]);
    
    getchar();
    return 0;
}

 
 
 
 
 

 

 

  

© 著作权归作者所有

共有 人打赏支持
涂孟超
粉丝 12
博文 2004
码字总数 14107
作品 0
深圳
程序员
C语言编程学习程序解析:C语言的指针和函数返回值解析

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/27 ⋅ 0

C语言/C++编程学习之指针和数组的深入理解

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/14 ⋅ 0

学习大数据为什么最好有java语言基础?

  本文需要5分钟左右阅读完成,建议收藏以后阅读,里面都是干货,可以亲自试验一下,如果觉得好用可以帮忙点赞转发一下,谢谢!交流学习java大数据可以加群460570824。   计算机编程语言...

java分享 ⋅ 2017/12/18 ⋅ 0

计算机专业C语言编程学习重点:指针化难为易

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/31 ⋅ 0

Go语言_反射篇

这里的GO使用的版本是1.2 Go语言的基本语法的使用已经在前几篇陆陆续续学完了,下面可能想写一些Go的标准库的使用了。 先是reflect库。 reflect库的godoc在http://golang.org/pkg/reflect/ ...

王二狗子11 ⋅ 01/08 ⋅ 0

C语言编程学习程序解析:数据类型和函数返回值解析

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/27 ⋅ 0

一、C语言概述

说明:这个C语言专题,是学习iOS开发的前奏。也为了让有面向对象语言开发经验的程序员,能够快速上手C语言。如果你还没有编程经验,或者对C语言、iOS开发不感兴趣,请忽略 为什么iOS开发要先...

长平狐 ⋅ 2013/03/28 ⋅ 1

C语言学习之 数组,指针,字符串. (三)

保持一贯的风格, 进入正题之前,先写一段废话. 写点东西是件轻松的事, 我从未将写内容当作是一种负担. 但是生活中总有一些事情会扰乱心神. 我是说我之前想把一篇内容写全,写丰富完整事实上我写...

泡不烂的凉粉 ⋅ 2012/11/08 ⋅ 0

业余爱好者的C程序设计学习之路

我学习和工作的方向都是化工,和 IT 专业一点边都不搭,属于程序设计爱好者一类。坚持了很多年了,谈谈我的认识。 一、为什么是C 汇编太难,直接下手会吓死宝宝的。 basic 不能考虑,因为“对...

四彩 ⋅ 2016/02/04 ⋅ 2

C++和Java的区别

转自:http://club.topsage.com/thread-265349-1-1.html Java并不仅仅是C++语言的一个变种,它们在某些本质问题上有根本的不同:   (1)Java比C++程序可靠性更高。有人曾估计每50行C++程序...

Rachy1989 ⋅ 2017/04/26 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Boot整合模板引擎thymeleaf

项目结构 引入依赖pom.xml <!-- 引入 thymeleaf 模板依赖 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId......

yysue ⋅ 18分钟前 ⋅ 0

ConstraintLayout使用解析

AndroidStudio3.0创建Project默认的布局就是ConstraintLayout。 AndroidStudio3.0前的可以自己修改,使用ConstraintLayout。 为了要使用ConstraintLayout,我们需要在app/build.gradle文件中...

_OUTMAN_ ⋅ 30分钟前 ⋅ 0

OSChina 周三乱弹 —— 这样的女人私生活太混乱了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 胖达panda :你经历过体验到人生的大起大落吗?我一朋友在10秒内体验了,哈哈。@小小编辑 请点一首《almost lover》送给他。 《almost love...

小小编辑 ⋅ 今天 ⋅ 9

自己动手写一个单链表

文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:好好学java,获取优质学习资源。 一、概述 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对...

公众号_好好学java ⋅ 今天 ⋅ 0

Centos7重置Mysql 8.0.1 root 密码

问题产生背景: 安装完 最新版的 mysql8.0.1后忘记了密码,向重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下: 第一步:修改配置文件免密码登录mysql vim /etc/my.cnf 1...

豆花饭烧土豆 ⋅ 今天 ⋅ 0

熊掌号收录比例对于网站原创数据排名的影响[图]

从去年下半年开始,我在写博客了,因为我觉得业余写写博客也还是很不错的,但是从2017年下半年开始,百度已经推出了原创保护功能和熊掌号平台,为此,我也提交了不少以前的老数据,而这些历史...

原创小博客 ⋅ 今天 ⋅ 0

LVM讲解、磁盘故障小案例

LVM LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。 1.新建分区,更改类型为8e 即L...

蛋黄Yolks ⋅ 今天 ⋅ 0

Hadoop Yarn调度器的选择和使用

一、引言 Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。 上图是Yarn的基本架构,其中ResourceManager是整个架构的核心组件,它负...

p柯西 ⋅ 今天 ⋅ 0

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 今天 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部