笔记:
数组名不是lvalue,是常量,不可改变。而指针是一个左值。
-
请问 str[3] 和 *(str + 3) 是否完全等价?
答:错误答案:不完全等价,前者表示数组,后者表示数组指针。
正确答案:解析:在 C 语言中,数组名是被作为指针来处理的。更确切的说,数组名就是指向数组第一个元素的指针,而数组索引就是距离第一个元素的偏移量。这也解释了为什么在 C 语言中数组下标是从 0 开始计数的,因为这样它的索引可以对应到偏移量上。因此,str[3] 和 3[str] 是相同的,因为它们在编译器的内部都会被解释为 *(str + 3)。
-
请问下边代码是否可以正常执行?如果可以,会打印什么值?如果不行,请说明原因?
#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个元素。
数组的下标法跟指针法访问是等价的
-
为什么不能使用 if (str1 == str2) 这样的形式来比较两个字符串?
答:不晓得;因为这样比较的是指向两