• 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不计算
    

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

  • 相关阅读:
    oracle常用命令
    批量导出docker镜像
    python中的xpath
    __call__, __str__
    闭包
    ORM操作
    nginx跨域请求
    docker-compose命令
    nginx 之 websocket长连接
    nginx--proxy_set_header
  • 原文地址:https://www.cnblogs.com/sakurapiggy/p/13186371.html
Copyright © 2020-2023  润新知