A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© P@sser-by 中级黑马   /  2015-3-14 00:04  /  2356 人查看  /  29 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

29 个回复

正序浏览
sydie 发表于 2015-3-25 08:58
我来问一个基础的吧。/*编写一个函数char_contains(char str[],char c),如果字符串str中包含字符c则返回数 ...

return 0 如果写在for循环里面,那你的 for循环没进行的话(条件不满足),那函数就没有返回值了啊。所以此时存在异常,编译器只能在编译的时候去确定了,即只是显示 warning
回复 使用道具 举报
oc的难点,不是说内存管理,不是说遍历,类的使用,而是众多小的知识点的融合,可以说有很多很多的知识点,也有很多很多的方法,可能漏掉哪一个都不能很好的进行下去,做入学考试题真心体会到了,基础还是不够扎实啊
回复 使用道具 举报
Ammar 中级黑马 2015-3-25 16:03:52
28#
我自己一个一个字母敲得代码。  是一道入学考试题:
输入一组大写字符串,要求找出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. }
复制代码




回复 使用道具 举报
哈哈,我就是来看看
回复 使用道具 举报
sydie 中级黑马 2015-3-25 08:58:41
26#
我来问一个基础的吧。/*编写一个函数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)  求解答

评分

参与人数 1黑马币 +3 收起 理由
P@sser-by + 3 return 0用在main函数内是起到退出整个程序.

查看全部评分

回复 使用道具 举报
qianlongwuyong 来自手机 中级黑马 2015-3-25 08:03:51
25#
多来点这样的
回复 使用道具 举报
Java 可以实现多个继承吗?

答:Java不允许多个继承,因为如果两个父类含有同一名字的属性或行为的话,子类在调用的时候,编译器会困惑(不知道到底在调用那个父类的内容)。但是Java支持实现多个接口,因为实现的抽象方法体都在子类里实现,没有困惑性的问题。

评分

参与人数 1黑马币 +3 收起 理由
P@sser-by + 3 赞一个!

查看全部评分

回复 使用道具 举报
岳挺 发表于 2015-3-14 21:34
scanf(),getchar(),gets()三者的用法和区别?

我发了一个帖子,你可以可看看
回复 使用道具 举报
一步一个脚印 发表于 2015-3-14 21:35
关于函数形参作用域疑惑?

形参的作用域就是本函数,望采纳
回复 使用道具 举报
godot 中级黑马 2015-3-21 15:47:35
21#
C语言和Java有什么区别?
1. C语言是面向过程的语言,执行效率高;Java是面向对象的语言,执行效率比C语言低
2. C语言最关键的是比Java多了指针
3. C语言的安全性不如Java,C语言没有Java的垃圾回收机制,申请的空间要手动释放。
4. Java的通用性好,可以跨平台直接移植,只要有安装Java虚拟机(JVM)就可以了。

评分

参与人数 1黑马币 +3 收起 理由
P@sser-by + 3 赞一个!

查看全部评分

回复 使用道具 举报
想问一下,oc的block在开发用得多不多?好像感觉还挺好用的
还有block是不是一个对象啊?
如果时对象,那跟其他一般类对象有没有不同之处?谢谢~~
回复 使用道具 举报
OC内存管理:
有加必有减,一一对应;
详细就是:非ARC:通过retain,alloc,copy等创建对象时,引用计数器加1,那么必须有对应的release或者autorelease对计数器进行减 1操作;
宏观方面:如果方法中有对计数器进行加或减操作,那么调用方法的代码段无需对应的减或加操作。release不是销毁对象,而是对计数器减1;
autorelease自动回收池可以 创建无限个,可以嵌套,好处是不用关心对象的释放时间,不关心什么时候调用release,缺点不能精确控制,适用于占用内存较小的数据类型;
循环引用一个必须用retain,另一个则用assign
ARC:不是内存回收机制,只是自动生成了代码,减少了程序员的负担;
判断回收准则:只要没有强指针指向对象,就会释放对象
循环引用一个必须用strong,另一个则用weak

评分

参与人数 1黑马币 +3 收起 理由
P@sser-by + 3 赞一个!

查看全部评分

回复 使用道具 举报
android和ios移动互联的区别和市场?
答:Android是基于Java体质的运行的东西  提供一个Java虚拟机,在虚拟机上写Java代码去展现功能  什么机型都可以去做  现在市场处于涨的姿态
      ios是基于oc语言的东西 直接写东西。所以往往说苹果的东西总是快一点。可能就是这个原因!市场目前紧缺,所以强手  值得去学习  不过作为一个开发者应该要懂得更多  才是必须要的  

评分

参与人数 1黑马币 +3 收起 理由
P@sser-by + 3 淡定

查看全部评分

回复 使用道具 举报
一步一个脚印 发表于 2015-3-15 23:13
首先确定一点指针变量作为形参它的作用域和其他类型的变量一样也是在函数体中。原因如下:首先你明确下作 ...

记住c中只有传值这中方式,至于你传进了一个指针起到了传址调用一样的效果,其实不然,你传的指针或值都只是一份拷贝
回复 使用道具 举报
P@sser-by 发表于 2015-3-15 01:00
如果是指针作为形参的话该如何解释其作用域?指针传的是地址,指针是可以操作内存里的值,是不是算是超出 ...

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

评分

参与人数 1黑马币 +3 收起 理由
P@sser-by + 3 赞一个!

查看全部评分

回复 使用道具 举报
一步一个脚印 发表于 2015-3-14 21:36
分为二种情况,一是作为函数声明时的形参,大家都知道,是函数原型作用域,这个作用域决定了函数有多个参 ...

如果是指针作为形参的话该如何解释其作用域?指针传的是地址,指针是可以操作内存里的值,是不是算是超出函数体了呢?其他类型是值传递,作用域界定为函数体好理解,那么指针呢?
回复 使用道具 举报
一步一个脚印 发表于 2015-3-14 21:35
关于函数形参作用域疑惑?

分为二种情况,一是作为函数声明时的形参,大家都知道,是函数原型作用域,这个作用域决定了函数有多个参数时,参数不能同名,因为在同一作用域,这个作用域就时函数原型作用域。二是作为函数定义时候的形参,查阅相关文档,发现是把函数定义时候的形参的作用域规定在整个函数体,有点费解,我是这么理解的,函数定义时候的多个形参,相当于函数体内的局部变量,因为他们在同一作用域,即都在函数体内,所以函数定义时候的形参不能同名,然后 函数内部自己定义的局部变量,作用域也是在函数体内,当然也不能和形参同名。over
回复 使用道具 举报
岳挺 发表于 2015-3-14 21:34
scanf(),getchar(),gets()三者的用法和区别?

读取字符时:
scanf()以Space、Enter、Tab结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲区中);
getchar()以Enter结束输入,也不会舍弃最后的回车符;
读取字符串时:
scanf()以Space、Enter、Tab结束一次输入
gets()以Enter结束输入(空格不结束),接受空格,会舍弃最后的回车符

评分

参与人数 1黑马币 +3 收起 理由
P@sser-by + 3 其实这三个各自还有很多特点,可以查找资料.

查看全部评分

回复 使用道具 举报
关于函数形参作用域疑惑?
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马