文档章节

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

涂孟超
 涂孟超
发布于 2014/09/26 15:34
字数 486
阅读 6
收藏 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;
}

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2008/11/27/1342667.html

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

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

小辰带你看世界
05/27
0
0
C语言/C++编程学习之指针和数组的深入理解

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

小辰带你看世界
05/14
0
0
学习大数据为什么最好有java语言基础?

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

java分享
2017/12/18
0
0
计算机专业C语言编程学习重点:指针化难为易

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

小辰带你看世界
05/31
0
0
Go语言_反射篇

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

王二狗子11
01/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Shell编程(expect同步文件、指定host和同步文件、构建文件分发系统、批量执行命令)

expect脚本同步文件 需求:自动同步文件 实验准备: A机器:192.168.248.130 B机器:192.168.248.129 实现: 1.A机器编写4.expect脚本文件,内容如下所示: #!/usr/bin/expectset passwd "...

蛋黄_Yolks
23分钟前
2
0
ppwjs之bootstrap颜色:背景颜色

<!DOCTYPT html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><title>ppwjs欢迎您</title><link rel="icon" href="/favicon.ico" ......

ppwjs
23分钟前
1
0
Ubuntu与 Fedora之对比

大家好。今天我将重点介绍两个流行的Linux发行版之间的一些特性和差异; Ubuntu 18.04和Fedora 28。它们都有自己的包管理; Ubuntu使用DEB,而Fedora使用RPM,但它们都具有相同的桌面环境(GNO...

linuxprobe16
27分钟前
2
0
线性代数入门

线性代数的概念对于理解机器学习背后的原理非常重要,尤其是在深度学习领域中。它可以帮助我们更好地理解算法内部到底是怎么运行的,借此,我们就能够更好的做出决策。所以,如果你真的希望了...

牛奋Debug
昨天
3
0
开发5分钟,调试2小时 - 该如何debug?

几年来我在答疑群、论坛、公众号、知乎回答的各种问题,没有一万也有八千。其中有三分之二以上都是在帮人看报错,帮人 debug(调试代码)。 可以说,会不会 debug,有没有 debug 的意识,懂不...

crossin
昨天
4
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部