C语言数组和指针

1.const 关键字声明后数据不能修改

2.sizeof 数组名指的是整个数组的大小(以字节为单位)

  sizeof 数组名[0]指的是数组中一个元素的大小

  整个数组的大小除以单个元素的大小就是数组元素的个数

3.初始化器的重要性

  1)如果初始化器后面有更多的值。那么后面的值将被用于初始化指定元素后面的元素

  2)如果再次初始化指定的元素,那么最后的初始化将会取代之前的初始化

4.C不允许把数组作为一个单元赋给另一个数组,初初始化以外也不允许使用花括号列表的形式赋值

  #define SIZE 5

  int main(void)

  {

    int oxen[SIZE] = {0,1,2,3};  /*初始化没问题,不足的参数设置为0*/

    int yaks[SIZE];

    yaks = oxen; /*不允许*/

    yaks[SIZE] = oxen[SIZE];/*数组下标越界*/

    yaks[SIZE] = {0,1,2,3};/*不起作用*/

  }

5.数组边界

  在C标准中,使用越界下标的结果是未定义的

  使用越界的数组下标可能会导致程序改变其他变量的值。不同的编译器运行同一个程序的结果可能不同,有些会导致程序异常中止。

  要注意数组的边界

6.指针和数组

  short类型占两个字节、double类型占八个字节

  在C中,指针加一指的是增加一个存储单元,对数组而言,这意味着加一后得到地址是下一个元素的地址,而不是下一个字节的地址,所以必须声明指针所指向对象的类型

  系统中地址是按字节编码的

7.total += *start++;//一元运算符*和++的优先级相同,但结合律是从右往左

  即表示为:1)*start++=*(start++) => m=start;*m;start++(先把指针指向位置上值取出,然后再递增指针)

                    2)total = total+*m;

8.int * p = & a;//p是指向a的指针,p中存的是a的地址

  &p 是指向指针p的指针,&p中存的是指针p的地址

9.创建一个指针时,系统只分配了储存指针本身的内存,并未分配存储数据的内存,因此,在使用指针之前,必须先用已分配的地址初始化它。

10.const 指针是指不能用指针来改变它所指向的值,但是可以让指针指向别处

11.1)把const数据或非const数据的地址初始化为指向const的指针或为其赋值是合法的

      double rate[5] ={1,2,3,4,5};

     const double locked[4]={1,2,3,4};

     const double *pc = rate; //有效

     pc = locked;//有效

     pc = &locked[3] ;//有效

2)只能把非const数据的地址赋给普通指针

     double rate[5] ={1,2,3,4,5};

     const double locked[4]={1,2,3,4};

     double *pp = rate;//有效

     pp = locked;//无效<因为如果成立的话就可以用指针改变locked的值了>

     pp = &rate[3];//有效

12.double * const pc = &rate;//可以初始化一个不能指向别处的指针

13.int (* p)[2];//p指向一个内含两个int类型值的数组

     int * p[2];//p是一个内含两个指针元素的数组,每个元素都指向int 的指针

14.指针的兼容性

  指针之间的赋值比数值类型之间的赋值要严格

  假如有如下声明:

  int * pt;

  int (*pa)[3];

  int ar1[2][3];

  int ar2[3][2];

  int **p2;//一个指向指针的指针

  有如下语句:

  pt = &ar1[0][0];//都是指向int的指针

  pt = ar1[0];//都是指向int的指针

  pt = ar1;//无效

  pa = ar1;//都是指向内含3个int类型元素的数组的指针

  pa = ar2;//无效

  p2 = &pt;//both point-to-int *

  *p2 = ar2[0];//都是指向int的指针

  p2 = ar2;//无效


15.把const指针赋给非const指针不安全,因为这样可以使用新的指针改变const指针指向的数据

    但是把非const指针赋给const指针没问题,前提是只进行一级解引用

16.编译器会把数组表示法转换成指针表示法

    ar[1] -> ar+1;

    int ar[][length] ->表示ar指向一个内含length个int类型值的数组

    int sum2(int ar[3][4],int rows);//有效声明,但是3会被忽略

17. 在把数组名作为实际参数时,传递给函数的不是整个数组,而是数组的地址(因此,函数对应的形式参数是指针)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容