第十章 数组和指针

1.求数组元素个数:sizeof (num)/num[0]。

2.指定初始化项目(C99):

int arr[6]={[5]=212};//未初始化的元素都被设置为0
特性:

a)如果在一个指定初始化项目后跟有不知一个值,则这些值用来对后续的数组元素初始化。

b)如果多次对一个元素初始化,则最后一次有效。

3.C不支持把数组作为一个整体进行赋值,也不支持用花括号括起来的列表形式进行赋值(初始化的时候除外)。

4.初始化二维数组:

可以省略内部的花括号,只保留最外面的一对花括号。

5.打印sizeof的返回值用%zd,若不支持用%u或%lu。

    打印地址用%p,若不支持用%u或者%lu。

6.使用指针参数:

#include<stdio.h>
#define SIZE 10
int sump(int * start,int * end);
int main()
{
    int num[SIZE]= {20,10,5,39,4,16,19,26,31,20};
    int answer;
    answer=sump(num,num+SIZE);
    printf("The total number is %d.\n",answer);
    return 0;
}

int sump(int * start,int * end)
{
    int total=0;
    while(start<end)
        total+=*(start++);//*和++优先级相同,结合时都是从右向左,括号可加可不加
    return total;
}
C保证在分配存储空间的时候,指向数组之后的第一个位置的指针是合法的。

7.使用指针时,有一个规则需要特别注意:不能对未初始化的指针取值。

int *p;//p未初始化,值是随机的
*p = 5;//5被存到未知的位置,可能会覆盖系统的内存数据
切记:当创建一个指针时,系统只分配了用来存储指针本身的内存空间,并不分配用来存储数据的内存空间。所以在使用指针前,必须赋予它一个已分配的内存空地址。比如可把一个已经存在的变量地址赋给它,或使用malloc()函数分配内存。

8.数组名为指针常量,不可修改。

9.对数组使用const,使数组内容不被改变。将常量或非常量数据的地址赋给指向常量的指针是合法的(非const 赋给 const 允许的前提是只进行一层运算),只有非常量数据的地址才可以赋给普通的指针(不能将const 赋给非const),否则就可以用指针来修改被认为是常量的数据。

double * const p = num;//使p不指向别处,可以修改数据
const double * p = num;//不能修改p的数值,但可以修改num【0】

10.二维数组要取两次值才可以取出存储的数据。



11.函数和多维数组:

void fun(int (* p)[4]);
void fun(int p[][4]);
12.变长数组(VLA):

变长数组的变指其维大小可以用变量来指定。

声明:

可以用*代替中括号中的rows和cols。

13.复合文字:






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值