最后还是决定在未来的道路上走向软件开发者这条路,从现在重新复习数据结构和算法。
关于数组有几个比较有意思的特点。
1.对于数组 int List[3],编译器将List[i]解释为指向一个地址为List + i*sizeof(int)的整数的指针。
对于int * List, int *List2[5],两个都是指向int 类型的变量,但是编译器会为后者分配五个整数存储空间。
List2实际是上指向List2[0],List2 + i 实际上是&List2[i].在C语言中是不需要加上偏移量的。故*(List2 + i) = List2[i];
2.C语言中,数组作为参数,接受数组作为参数的函数实际上不会为数组重复分配空间,可以理解为当数组作为参数时,仅仅将自己的地址传进去了,(感觉像传址调用),所以函数中对参数数组的变动也会反映在数组本身。
/*举个例子*/ int sum(int list [], int n ) //n为维数
{
for ( int i = 0, i < n ; i++)
{
list[i] += i;
}
}
sum(a,3);
在这里面,实参比如说 a= &a[0],先被复制到一个临时单元中,成为形参list的具体值。在函数体中,若list[i] 出现在赋值语句左边,就间接引用(list + i)指向的值,若list[i]出现在赋值语句右边,则等号右边的求值结果会存入单元(list +i).这个例子告诉我们虽然C语言函数传值调用,但数组作为函数参量并不传递具体的数组内容。
时间: 2024-10-09 00:14:48