《带你学C带你飞学习笔记》—— SE23指针数组和数组指针(未完成)

笔记:
数组名不是lvalue,是常量,不可改变。而指针是一个左值。

  1. 请问 str[3] 和 *(str + 3) 是否完全等价?

    答:错误答案:不完全等价,前者表示数组,后者表示数组指针。

    正确答案:解析:在 C 语言中,数组名是被作为指针来处理的。更确切的说,数组名就是指向数组第一个元素的指针,而数组索引就是距离第一个元素的偏移量。这也解释了为什么在 C 语言中数组下标是从 0 开始计数的,因为这样它的索引可以对应到偏移量上。因此,str[3] 和 3[str] 是相同的,因为它们在编译器的内部都会被解释为 *(str + 3)。

  2. 请问下边代码是否可以正常执行?如果可以,会打印什么值?如果不行,请说明原因?

		#include <stdio.h>
		
		int main()
		{
		        int a[5] = {1, 2, 3, 4, 5};
		        int *b;
		
		        b = &a[3];
		        printf("%d\n", b[-2]);
		
		        return 0;
		}
答:可以正常运行,b是指向数组a第四个元素的地址,对其进行减2运算是将地址重新指向数组第2个元素。
数组的下标法跟指针法访问是等价的
  1. 为什么不能使用 if (str1 == str2) 这样的形式来比较两个字符串?
    答:不晓得;因为这样比较的是指向两

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值