首先声明,该系列博客记录的重点是C、OBject-C(以后简称OC)相对于Java的不同,还有一些我在编码练习过程中遇到的问题还有解决方法,而并不是一份流水式的完全的学习笔记。还有一些内容是C和OC中特有的东西等。
调用的时候:
一、数组
在C中数组的定义只有一种语法: 类型 名称[大小] 例如 : int Arr[10];没有第二种定义方法,对于他的赋值是和Java一样的。
二、SizeOf函数
在C中对于数组的大小,没有Java中的.size()方法,不能直接去获得一个数组中元素的数量。但是可以利用sizeof函数来求得。sizeof(Object)的功能是求得Object的长度。那么方法就来了,用数组整体的长度除以数组中单个元素的长度即可得数组中元素的个数。在代码中即是
int size = sizeof(sA)/sizeof(sA[0]);
另外,值得注意的是,在方法中对于形参数组长度的获取。在一个方法中对于通过形参传过来的数组进行sizeof的时候会报错,如下图。
三、函数形参
说到函数的形参,C语言中形参虽然接收后的值是地址,但是在方法中对形参进行赋值这个过程是单向的。即形参可以得到实参的数值,但是对于形参的赋值并不会反向传递回实参。这点和Java是有区别的。个人猜测C的处理机制应该是在为函数分配资源空间的时候也为形参分配了空间,并将实参的数值拷贝进去,然后将形参的地址记录下来供函数内的语句进行调用。至于是不是这么做的和这么做的原因为何有待探究。在以后有时间会想办法进行验证的。需要郑重一提的是数组形参。
void sort(int arr[],int size){
int re[size];
for (int i = 0; i < size; i++) {
for (int j = i+1; j < size; j++) {
if (arr[i] > arr[j]) {
arr[i] += arr[j];
arr[j] = arr[i] - arr[j];
arr[i] = arr[i] - arr[j];
re[i] = arr[i];
}
}
}
}
调用的时候:
sort(arr1,5);
上面的是一个选择排序方法,下面的是一个调用。这时候你觉得数组arr1的值会被成功排序吗?答案是会的。这里要注意的是,在调用的时候,是把数组arr的地址作为参数传进方法内的,所以最后形参获得的数值也是和实参等值的arr的地址,再对其进行排序的时候,自然就是对arr的数据进行的直接操作了。所以这里的数组会被排序。