C专家编程:第四章:数组和指针并不相同

本文探讨C语言中数组和指针的区别。声明与定义的差异,如数组名是左值但不可修改;在引用时,指针通过地址计算访问元素,而数组则直接访问。此外,指针定义不分配空间,但字符串常量初始化例外。数组可以被修改,而初始化的字符串常量数组则不应被修改。
摘要由CSDN通过智能技术生成

1、声明和定义:

声明相当于普通的声明:它所说明的并非自身,而是描述其他地方的创建的对象。

定义相当于特殊的声明:它为对象分配内存。

例如:定义:int  my_array[100];

    声明:extern int  my_array[ ];指代其他地方定义的对象。(二维数组需要提供除最左边一维之外的其他维的长度)

2、X = Y;

1)符号X是X所代表的地址,符号Y是Y代表的地址的内容;

2)X是左值,Y是右值;

3)左值在编译时可知,左值表示储存结果的地方,右值直到运行时才知,右值表示“Y的内容”。

注:数组名是左值,但不是可修改的左值,标准规定赋值符必须用可修改的左值作为它左边一侧的操作数。

3、当“以指针方式引用”时:

char  *p ="abcdefgh";

当书写了extern  char  *p,然后用 p[3] 来引用其中的元素时,编译器将会:

1)取得符号表中 p 的地址,提取存储于此处的指针。

2)把下标所表示的偏移量与指针相加,产生一个地址。

3)访问上面这个地址,取得字符。

编译器已被告知p 是一个指向字符的指针,(相反,数组定义告诉编译

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值