黑马程序员技术交流社区

标题: 福利送币>有问有答 [打印本页]

作者: P@sser-by    时间: 2015-3-14 00:04
标题: 福利送币>有问有答
我的分够了,还有剩余币,来个互动吧!自己对C或者OC的知识点进行提问,然后根据自己的理解,自己给出回答,可以是对知识点的总结与新的理解,尽量全面。我会根据所提供的内容+1-3个黑马币,重复别人的不给,对别人的自问自答作精彩补充的+1,我的币也不多,就是想互动一下,送完为止。
例如:设计一个类需要考虑什么?
答:
1> 类名
* 类名的第一个字母必须是大写
* 不能有下划线
* 多个英文单词,用驼峰标识
2> 属性
3> 行为(功能)
......

作者: miosec    时间: 2015-3-14 01:05
我来先提问,面向对象有哪三大特性?
作者: still过客    时间: 2015-3-14 07:09
miosec 发表于 2015-3-14 01:05
我来先提问,面向对象有哪三大特性?

封装,继承,多态
作者: 黑色淘金    时间: 2015-3-14 09:00
-(void) myMethod {
NSString * myString = [[NSString alloc] init];                   //retainCount=1
Foo * myFoo = [[Foo alloc] initWithName:myString];      //retainCount=1
NSLog("Foo's Name:%@", [myFoo getName]);
[myFoo release];                             //retainCount=0 so deallocate
[myString release];                         //retainCount=0 so deallocate
}
上面这个函数里面,Foo * myFoo = [[Foo alloc] initWithName:myString];  这也算是对myString 的一次引用啊,这是实参,我形参指向他,
就相当于一个形参指针 = myString,为什么不算一次引用呢?应该先retain啊,retainCount等于2,为什么啊?
作者: 夏皮冬絺    时间: 2015-3-14 14:27
我来自问自答一个,Objective-C的类可以多重继承么?可以采用多个协议么?
作者: 夏皮冬絺    时间: 2015-3-14 14:28
夏皮冬絺 发表于 2015-3-14 14:27
我来自问自答一个,Objective-C的类可以多重继承么?可以采用多个协议么?

不可以多重继承,可以采用多个协议。
作者: ab63333334    时间: 2015-3-14 14:44
原型:extern int strlen(char *s);

  用法:#include

  功能:计算字符串s的(unsigned int型)长度

  说明:返回s的长度,不包括结束符NULL。

  举例:

  // strlen.c

  #include

  #include

  main()

  {

  char *s="Golden Global View";

  clrscr();

  printf("%s has %d chars",s,strlen(s));

  getchar();

  return 0;

  }

作者: P@sser-by    时间: 2015-3-14 20:45
ab63333334 发表于 2015-3-14 14:44
原型:extern int strlen(char *s);

  用法:#include

代码不完整吧,两个#include后面的东西呢...
作者: 等风的车    时间: 2015-3-14 21:06
c语言中数据类型和java的不同处?

C的int的位数是根据当前操作系统的位数决定的,比如用的是XP,那这个int就占用32位(4字节),java的int一律32位。
C的char占8位(是为了应付ASCII码),java的char占16位(是为了更好支持Unicode),
C++中的基本数据类型可以看成类,而java中不能。
作者: 吴阳    时间: 2015-3-14 21:25
我自问自答一个 :xml 解析有几种方式?
答:有DOM,SAX,STAX等
作者: 岳挺    时间: 2015-3-14 21:34
scanf(),getchar(),gets()三者的用法和区别?
作者: 一步一个脚印    时间: 2015-3-14 21:35
关于函数形参作用域疑惑?
作者: 岳挺    时间: 2015-3-14 21:35
岳挺 发表于 2015-3-14 21:34
scanf(),getchar(),gets()三者的用法和区别?

读取字符时:
scanf()以Space、Enter、Tab结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲区中);
getchar()以Enter结束输入,也不会舍弃最后的回车符;
读取字符串时:
scanf()以Space、Enter、Tab结束一次输入
gets()以Enter结束输入(空格不结束),接受空格,会舍弃最后的回车符
作者: 一步一个脚印    时间: 2015-3-14 21:36
一步一个脚印 发表于 2015-3-14 21:35
关于函数形参作用域疑惑?

分为二种情况,一是作为函数声明时的形参,大家都知道,是函数原型作用域,这个作用域决定了函数有多个参数时,参数不能同名,因为在同一作用域,这个作用域就时函数原型作用域。二是作为函数定义时候的形参,查阅相关文档,发现是把函数定义时候的形参的作用域规定在整个函数体,有点费解,我是这么理解的,函数定义时候的多个形参,相当于函数体内的局部变量,因为他们在同一作用域,即都在函数体内,所以函数定义时候的形参不能同名,然后 函数内部自己定义的局部变量,作用域也是在函数体内,当然也不能和形参同名。over
作者: P@sser-by    时间: 2015-3-15 01:00
一步一个脚印 发表于 2015-3-14 21:36
分为二种情况,一是作为函数声明时的形参,大家都知道,是函数原型作用域,这个作用域决定了函数有多个参 ...

如果是指针作为形参的话该如何解释其作用域?指针传的是地址,指针是可以操作内存里的值,是不是算是超出函数体了呢?其他类型是值传递,作用域界定为函数体好理解,那么指针呢?
作者: 一步一个脚印    时间: 2015-3-15 23:13
P@sser-by 发表于 2015-3-15 01:00
如果是指针作为形参的话该如何解释其作用域?指针传的是地址,指针是可以操作内存里的值,是不是算是超出 ...

首先确定一点指针变量作为形参它的作用域和其他类型的变量一样也是在函数体中。原因如下:首先你明确下作用域是什么,它指的是标识符在程序中的可见范围。指针变量作为函数声明时候的形参肯定也是函数原型作用域,即有多个指针变量作为参数时不能同名。然后讨论指针作为函数定义时候的形参,它和普通变量没有2样,你只能在函数体范围内能访问到他们。至于你说指针变量改变了内存的值,这是在函数调用时候发生的事情,比如你传进了一个数组名a作为实参,在函数内部,你可以通过*a访问到第一个数组元素,*(a+1)访问到第二个,你当然可以改变他们的值,这就是所谓的间接访问,和作用域没有关系呀。和作用域没有关系,一定要知道这个,这个是*这个间接访问符号的功能或者说用法。亲能给分了吗 ,都11点多,我还在回复
作者: 一步一个脚印    时间: 2015-3-15 23:21
一步一个脚印 发表于 2015-3-15 23:13
首先确定一点指针变量作为形参它的作用域和其他类型的变量一样也是在函数体中。原因如下:首先你明确下作 ...

记住c中只有传值这中方式,至于你传进了一个指针起到了传址调用一样的效果,其实不然,你传的指针或值都只是一份拷贝
作者: 丶有果灬    时间: 2015-3-16 00:06
android和ios移动互联的区别和市场?
答:Android是基于Java体质的运行的东西  提供一个Java虚拟机,在虚拟机上写Java代码去展现功能  什么机型都可以去做  现在市场处于涨的姿态
      ios是基于oc语言的东西 直接写东西。所以往往说苹果的东西总是快一点。可能就是这个原因!市场目前紧缺,所以强手  值得去学习  不过作为一个开发者应该要懂得更多  才是必须要的  
作者: yyx1992    时间: 2015-3-21 00:18
OC内存管理:
有加必有减,一一对应;
详细就是:非ARC:通过retain,alloc,copy等创建对象时,引用计数器加1,那么必须有对应的release或者autorelease对计数器进行减 1操作;
宏观方面:如果方法中有对计数器进行加或减操作,那么调用方法的代码段无需对应的减或加操作。release不是销毁对象,而是对计数器减1;
autorelease自动回收池可以 创建无限个,可以嵌套,好处是不用关心对象的释放时间,不关心什么时候调用release,缺点不能精确控制,适用于占用内存较小的数据类型;
循环引用一个必须用retain,另一个则用assign
ARC:不是内存回收机制,只是自动生成了代码,减少了程序员的负担;
判断回收准则:只要没有强指针指向对象,就会释放对象
循环引用一个必须用strong,另一个则用weak
作者: richardchan    时间: 2015-3-21 00:35
想问一下,oc的block在开发用得多不多?好像感觉还挺好用的
还有block是不是一个对象啊?
如果时对象,那跟其他一般类对象有没有不同之处?谢谢~~
作者: godot    时间: 2015-3-21 15:47
C语言和Java有什么区别?
1. C语言是面向过程的语言,执行效率高;Java是面向对象的语言,执行效率比C语言低
2. C语言最关键的是比Java多了指针
3. C语言的安全性不如Java,C语言没有Java的垃圾回收机制,申请的空间要手动释放。
4. Java的通用性好,可以跨平台直接移植,只要有安装Java虚拟机(JVM)就可以了。
作者: darewolf    时间: 2015-3-22 14:57
一步一个脚印 发表于 2015-3-14 21:35
关于函数形参作用域疑惑?

形参的作用域就是本函数,望采纳
作者: darewolf    时间: 2015-3-22 15:22
岳挺 发表于 2015-3-14 21:34
scanf(),getchar(),gets()三者的用法和区别?

我发了一个帖子,你可以可看看
作者: bansy_chen    时间: 2015-3-25 01:17
Java 可以实现多个继承吗?

答:Java不允许多个继承,因为如果两个父类含有同一名字的属性或行为的话,子类在调用的时候,编译器会困惑(不知道到底在调用那个父类的内容)。但是Java支持实现多个接口,因为实现的抽象方法体都在子类里实现,没有困惑性的问题。
作者: qianlongwuyong    时间: 2015-3-25 08:03
多来点这样的
作者: sydie    时间: 2015-3-25 08:58
我来问一个基础的吧。/*编写一个函数char_contains(char str[],char c),如果字符串str中包含字符c则返回数值1,否则返回数值0
*/
#include <stdio.h>
#include <string.h>
int char_contains(char str[],char c);
int main()
{
   
    int reslut=char_contains("itast",'c');
    printf("%d\n",reslut);
    return 0;
}

int char_contains(char str[],char c)
{
    //字符串数组第几数用i变量表示
    for (int i=0; i<strlen(str); i++) {
        if(str== c ){
            
            return 1;
            
        }
        
        
    }
    //代码能来到这里,说明代码能执行完。
     return 0;
}
这里的return 0;为什么不能写在for循环内部。(写在内部有warning)  求解答

作者: sekey1991    时间: 2015-3-25 09:39
哈哈,我就是来看看
作者: Ammar    时间: 2015-3-25 16:03
我自己一个一个字母敲得代码。  是一道入学考试题:
输入一组大写字符串,要求找出ABCD出现的次数并按照出现次数由高到低输出代码如下:
  1. #include <stdio.h>
  2. #include <string.h>

  3. //定义一个全局结构体变量abcd,
  4. struct abcd
  5. {
  6.     int count;//统计次数
  7.     char c;//对应的字母
  8. };

  9. int ifCapital(char *c, int length);
  10. void statistics(char *c, int length);
  11. void sort(struct abcd *p, int n);

  12. int main()
  13. {
  14.     //随机输入一组大写字符串,然后统计ABCD出现的次数,并且结果按照次数大小进行输出
  15.     //定义一个整型变量存储字符串长度
  16.     int length = 1;
  17.     //定义一个数组变量存储用户输入的字符串
  18.     char str[100] = "a";
  19.     //验证用户输入的是否是大写字符串,不正确重新输入
  20.     while ( ifCapital(str, length) )
  21.     {
  22.         printf("请输入一组大写字符串:\n");
  23.         scanf("%s",  str);
  24.         length = strlen(str);
  25.     }
  26.     //统计ABCD出现的次数,并且结果按照次数大小进行输出
  27.     statistics(str, length);

  28.     return 0;
  29. }
  30. //函数:字符串不全是大写或者为空时,返回1
  31. int ifCapital(char *c, int length)
  32. {
  33.     for (int i = 0; i < length; i++)
  34.     {
  35.         if(c[i] > 90 || c[i] < 65)
  36.         {
  37.             return 1;
  38.         }
  39.     }
  40.     return 0;
  41. }
  42. //函数:统计str中ABCD出现的次数,并将统计结果按次数大小排序并输出
  43. void statistics(char *str, int length)
  44. {
  45.     int a = 0, b = 0, c = 0, d = 0;//定义变量abcd分别存储ABCD出现的次数
  46.     for (int i = 0; i < length; i++)
  47.     {
  48.         switch (str[i])
  49.         {
  50.             case 'A':
  51.                 a++;break;
  52.             case 'B':
  53.                 b++;break;
  54.             case 'C':
  55.                 c++;break;
  56.             case 'D':
  57.                 d++;break;
  58.             default:
  59.                 break;
  60.         }
  61.     }

  62.     //定义一个结构体数组,存放字母和其对应的统计次数
  63.     struct abcd abc[4];
  64.     abc[0].count = a;abc[0].c = 'A';
  65.     abc[1].count = b;abc[1].c = 'B';
  66.     abc[2].count = c;abc[2].c = 'C';
  67.     abc[3].count = d;abc[3].c = 'D';
  68.    
  69.     sort(abc, 4);
  70.    
  71. }
  72. //给结构体abcd进行排序并输出
  73. void sort(struct abcd *p, int n)
  74. {
  75.     struct abcd temp;
  76.     for (int i = 0; i < n; i++)
  77.     {
  78.         for (int j = 0; j < n - i - 1; j++)
  79.         {
  80.             if (p[j].count < p[j+1].count)
  81.             {
  82.                 temp = p[j];
  83.                 p[j] = p[j+1];
  84.                 p[j+1] = temp;
  85.             }
  86.         }
  87.     }
  88.     for (int i = 0; i < n; i++)
  89.     {
  90.         printf("%c字母出现次数为:%d次\n", p[i].c, p[i].count);
  91.     }
  92. }
复制代码





作者: guanguan0622    时间: 2015-3-25 16:05
oc的难点,不是说内存管理,不是说遍历,类的使用,而是众多小的知识点的融合,可以说有很多很多的知识点,也有很多很多的方法,可能漏掉哪一个都不能很好的进行下去,做入学考试题真心体会到了,基础还是不够扎实啊
作者: 王强~    时间: 2015-3-25 17:32
sydie 发表于 2015-3-25 08:58
我来问一个基础的吧。/*编写一个函数char_contains(char str[],char c),如果字符串str中包含字符c则返回数 ...

return 0 如果写在for循环里面,那你的 for循环没进行的话(条件不满足),那函数就没有返回值了啊。所以此时存在异常,编译器只能在编译的时候去确定了,即只是显示 warning




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2