【C语言】数组和指针

  开始学习数组和指针了,本身知道这块内容有点难,所以做个小笔记。

  数组有一系列类型相同的元素构成。数组声明的例子:

/* 一些数组声明的例子 */
int main(void)
{
    float candy[365]; //365个浮点数的数组
    char code[12]; //12个字符的数组
    int states[50]; //50个整数的数组
    ...
}

  可以使用下标数字来表示单个元素。下标数字也称索引,是从0开始计数的。candy[0]表示数组candy的第一个元素,candy[364]表示第365个元素,也就是最后一个元素。

  初始化

int powers[8] = {1, 2, 4, 6 ,8, 16, 32, 64}; //只有ANSI C支持这种初始化方式

  有时需要使用只读数组,也就是程序从数组中读取数值,但是不向数组中写数据。在这种情况下声明并初始化数组时,建议使用关键字const。

const int powers[8] = {1, 2, 4, 6 ,8, 16, 32, 64}; 

  部分初始化数组时,当数值数目少于数组元素数目时,多余的数组元素被初始化为0。

int arr[6] = {64, [3] = 45}; //把arr[3]初始化为45

  不像Java那样,C语言中编译器不检查索引的合法性。在标准C中,如果使用了错误的索引,程序执行结果是不可知的。程序能够运行,但是运行结果可能很奇怪,也可能会异常中断程序的执行。

 

  数组名同时也是该数组首元素的地址。flizny == &flizny[0]

//pnt_add.c --指针加法

#include <stdio.h>

#define SIZE 4

int main(void)
{
    short dates[SIZE];
    short *pti;
    short index;
    double bills[SIZE];
    double *ptf;
    pti = dates;
    ptf = bills;
    printf("%23s %10s\n", "short", "double");
    for(index = 0; index < SIZE; index++)
    {
        printf("pointers + %d: %10p %10p\n", index, pti + index, ptf + index);
    }
    return 0;
} 

  在C中,对一个指针加1的结果是对该指针增加1个存储单元。

  指针的数值就是它所指向的对象的地址。

  在指针前运用运算符*就可以得到该指针所指向对象的数值。

  对指针加1,等价于对指针的值加上它所指向的对象的字节大小。

  dates + 2 == &dates[2] //相同的地址

  *(dates + 2) == dates[2] //相同的值

【C语言】数组和指针,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。