今天看做基础视教程的时候,老师布置的作业 是将对象作为函数的参数,然后分析出打印结果
由于不明白结果,自己重新写了段代码来做测试分析,代码如下
- #import <Foundation/Foundation.h>
- //类的声明
- @interface Car : NSObject
- {
- @public
- int speed;
- int wheels;
- }
- -(void)run;
- @end
- //函数的声明
- void test(Car *newCar);
- //类的实现
- @implementation Car
- -(void)run
- {
- NSLog(@"时速为%dk/h,车轮%d个,正在行驶!\n", speed, wheels);
- }
- @end
- int main()
- {
- //创建对象
- Car *car1 = [Car new];
- car1->speed = 30;
- car1->wheels = 4;
- [car1 run];
-
- //调用函数
- test(car1);
- //调用方法
- [car1 run];
- return 0;
- }
- //函数定义
- void test(Car *newCar)
- {
- Car *car3 = [Car new];
- car3->speed = 50;
- car3->wheels = 3;
- newCar = car3;
- newCar->speed = 40;
- }
复制代码
结果
2015-04-16 22:20:16.447 a.out[1924:123016] 时速为30k/h,车轮4个,正在行驶!
2015-04-16 22:20:16.448 a.out[1924:123016] 时速为30k/h,车轮4个,正在行驶!
我最开始的答案是
2015-04-16 22:20:16.447 a.out[1924:123016] 时速为30k/h,车轮4个,正在行驶!
2015-04-16 22:20:16.448 a.out[1924:123016] 时速为40k/h,车轮3个,正在行驶!
后面算是弄明白了,我认为void test(car1)的执行过程是这样的
1.car1是指向对象的指针,其值是对象地址,将其传入函数是 将其值传给了newCar ,所以newCar = car1;
2.创建对象car3,并为成员变量赋值
3.newCar = car3 car3将值传给newCar,newCar现在指向的是car3
4.newCar ->speed = 40,其实现在是在给car3赋值了,所以car1的成员变量值没有改变;
所以真的是想通了之后觉得太简单了,希望能帮到这个知识点不明白的同学,也希望就只有我一个人不明白这知识点
|
|