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