/* ============================================================================ Name : TestArray.c Author : lf Version : Copyright : Your copyright notice Description : 数组的基本使用 ============================================================================ */ #include <stdio.h> #include <stdlib.h> int main(void) { getArraySizeAndSize(); copyArray(); testCharArray(); return EXIT_SUCCESS; } /** * 获取数组所占内存的大小和数组的长度 * 利用&array[i]和array+i取出每个元素的地址 * array+i为什么可以取出每个元素的地址? * 因为array表示了首元素的地址,所以在其基础上+1 * 表示了下一个元素,同理+i表示从首元素开始的第i个元素的地址 * * 小结: * array[i]与*(array+i)等价 * &array[i]与array+i等价 */ void getArraySizeAndSize(void){ int array[5]={0,1,2,3,4}; //数组所占的内存大小 int arraySize=sizeof(array); //数组的长度 int arrayLength=sizeof(array)/sizeof(int); printf("Array allocated memory:%dByte,Array length:%d\n",arraySize,arrayLength); //遍历数组 //取出数组的首地址 printf("Array start address =%d\n",array); //遍历数组元素 int i; for(i=0;i<arrayLength;i++){ printf("array[%d]=%d,address is %d,%d\n",i,array[i],&array[i],array+i); } } /** * 数组是不能直接赋值的. * 因为数组名就是该数组首元素的地址 */ void copyArray(){ int a[2]={1,2}; int b[2]; //b=a;//错误的. //应该采用一个for循环不断初始化b数组中的元素 } /** * 字符数组的注意事项: * 1 可以用printf("%s\n",charArray);的方式打印字符数组 * 2 尤其注意字符数组最后一位应该是\0作为结束符 * 3 可以用一个字符串直接对一个字符数组赋值. * 在这种方式时字符串的末尾会自动添加\0 */ void testCharArray(){ char charArray[5]={'h','f','a','b','\0'}; printf("%s\n",charArray); //如果使用了""那么会在其末尾自动加上\0 char charArray2[10]={"hello"}; //可以简写为 //char charArray2[10]="hello"; printf("%s\n",charArray2); }