zoukankan      html  css  js  c++  java
  • C语言学习笔记_指针和数组

    C语言学习笔记_指针和数组

    数组中关键符号的含义

    int a[10];
    a;				//a是数组名称,a不能做左值,a做右值表示数组首元素的首地址(&a[0]) 
    a[0];			//a[0]表示数组的首元素,左值表示数组第0个元素对应的内存空间,做右值表示元素的值
    &a;				//&a为数组的地址,不能做左值,做右值表示数组的首地址
    &a[0];			//&a[0]是数组第0个元素的首地址,表示首元素对应的内存空间
    

    为什么数组的地址不能做左值呢,因为数组的地址在编译器分配后就变成了常量,不可更改,所以不能做左值;

    指针访问数组

    int a[10];
    int *p;
    p = a;			//正确
    p = &a;			//错误,类型不兼容
    int x = a[m];	//数组访问方式
    int y = *(p+m);	//指针访问方式
    

    从上一节可知,a做右值表示数组首元素首地址,在这里类型为int *,和p的类型兼容;

    而&a为数组的地址,类型为 int (*)[10],和p的类型不兼容;

    强制类型转换

    对于char、int等属于兼容性类型,转换可能出错,也可能不会出错;

    float、double属于不兼容类型,转换肯定出错;

    sizeof运算符

    char str[] = "hello";
    char *p = strl
    printf("sizeof(p) = %d.
    ", sizeof(p));		//4,指针变量的长度固定为4
    printf("sizeof(*p) = %d.
    ", sizeof(*p));	//1,char类型的长度为1
    printf("sizeof(str) = %d.
    ", sizeof(str));	//6,数组长度为6,因为还有
    printf("strlen(p) = %d.
    ", strlen(p));		//5,strlen不计算
    

    另外,将数组作为参数传入函数的时候,将会传入数组首地址的指针变量,即函数内部无法获取数组的长度

  • 相关阅读:
    下拉框Html.DropDownList 和DropDownListFor 的经常用法
    39个让你受益的HTML5教程
    RapeLay(电车之狼R)的结局介绍 (隐藏结局攻略)
    BP神经网络算法学习
    java实现第七届蓝桥杯取球博弈
    java实现第七届蓝桥杯剪邮票
    java实现第七届蓝桥杯剪邮票
    java实现第七届蓝桥杯剪邮票
    java实现第七届蓝桥杯剪邮票
    java实现第七届蓝桥杯抽签
  • 原文地址:https://www.cnblogs.com/sakurapiggy/p/13186371.html
Copyright © 2011-2022 走看看