什么“循环”、“分支和条件”、“函数” 这些都不想看了。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一、关键字:static
二、运算符:& * (一元)
三、创建与初始化数组
四、指针 及指针与数组间的关系
五、编写使用数组的函数
六、二维数组
对于指针加 1 ,等价于对指针的值加上它指向的对象的字节大小。
当妴一个指针时,系统只分配了用来存储指针本身的内存空间,并不分配用来存储数据的内在空间。所以 int *p; *p = 5; 是严重错误的
C创建了指针数组、函数指针、指向指针的指针数组、指向函数的指针数组等等。
对于处理数组的函数,只能传递指针,原因是这样能使程序的效率更高。(如果通过向函数传递数组,那么函数中必须分配足够存放一份原数组的拷贝的存储空间,然后把原数组的所有数据复制到这个新数组中。)
保护数组内容
如果不想在函数中改变数组的值,则最好使用如下方式定义形参,{当函数想改变数组的值时,会报错}
int sum(const int ar[],int n)
{
**************
}
const 可以创建数组常量、指针常量以及指向常量的指针等等。
指向常量的指针不能用于修改数值,如下:
int kk[5] = {1,2,3,4,5};
const int *p = kk;
p[2] = 111; //错误
p++ //正确
关于指针赋值和const有一些规则:
将常量或非常量数据的地址赋给指向常量的指针是合法的。
只有非常量数据的地址才可以赋给普通的指针。[也就是说,常量数据的地址不能赋给普通指针。不然就可以改变改常量数据的值了]
多维数组与针指(这个看起有些头大,但我还是基本了解了。哈哈 ^ ^)
int zippo[4][2] ; zippo[0] a[1] a[2 ] a[3] 都是指针,例: zippo[0] 就是指向2个int元素的这么一个数组。zippo[0][0] a[0][1] 是变量,表示具体的值。
多维数组中,只要其包含的还有针的数据,都是指针,就像是 zippo[0] 或 zippo (zippo 是一个指向两个int类型的指针)
zippo 与 zippo[0] 的值是一样的。[ 因为数组名就是数组首元素的地址 (zippo的地址是zippo[0] ,而zippo[0]的地址是zippo[0][0]) ]
int zippo[4][2] ;
int *p[2] = zippo; //错误 。这是创建含有两个指向int类型的数组【数组元素为两个指针】。
int (*p)[2] = zippo; //正确。这是创建一个指向两个int类型数组的指针【只创建了一个指针】