iOS战记

iOS战记  ----C语言基础语法之战(三)

                                                                                                                             一个机械设计者的转行之战。

程序员A:“我给你出个脑筋急转弯,你说达芬奇密码的上面是什么?”

程序员B:   “这……太难了吧。不知道。”

程序员A:“笨!达芬奇密码的上面就是达芬奇帐号啊!"

"那达芬奇密码的下面是什么?”

程序员B:  “我……这……还是不知道。”

程序员A:“是达芬奇验证码”。

下面进入正题:

1、上次遗留的面试问题是字符串函数strcmp比较的内部实现方法。

<span style="font-size:18px;">    char string1[] = "iphone";
    char string2[] = "ipad";
    long length1 = strlen(string1);//这里要用long型
    long length2 = strlen(string2);
    int i = 0;
    while (string1[i] != '\0'&& string2[i] != '\0') {//字符串时一般都用while循环
        if (string1[i] - string2[i] != 0) {
            return string1[i] - string2[i];
            i ++;
        }
        if (length1 != length2) {
            return string1[i] - string2[i];
        }
    }</span>
2、注意:永远不要手动调用main函数,因为main是程序的入口,这就如同OC中的不能手动调用dealloc 和description一样。
3、三目运算符的另类(精华!!!!!!)用法。

以前我们用三目运算符大部分是

<span style="font-size:18px;">    int a = 1,b = 2;
    int max = a > b ? a : b;
    printf("%d",max); </span>

而比较精华的用法是下面这种!!!


<span style="font-size:18px;">    int a = 1,b = 2,c = 3,d = 4;
    int max = a > b ? c : d;
    printf("%d",max);
//    相当于======》
    if (a > b) {
        int max = 0;
        max = c;
    }</span>

4、指针:这是我学的最蒙圈的一部分,各种晕啊,一般的指针还好,牵扯和函数混合使用,什么函数回调啊等等。很多地方不理解,现在翻回去看了看,感觉好点,所以就把我理解的一小部分分享给大家,错误之处还望海涵。

<1> int *p = NULL;//空地址(没有地址)int*变量类型,*代表的是定义的指针, p是变量名称,p里面存储的是地址。
 printf("%p\n",p);//指针用%p打印,打印的都是十六进制。

<2> p = &a;//通常是这样给指针赋值。

<3> int *q = NULL;
    q = 0x9909;//指针变量可以重新赋值,这叫做指针的重指向。(一般不直接赋值)

<4> 两个星号作用不一样,
    int *r = NULL;//定义一个int 类型的指针变量
    *r;//取出指针变量所指向的内容。

<5> 指针变量的字节长度:64位操作系统指针占八个字节,32位的占四个。

<6> int a = 10;
    int *p = &a;
    *p = 11;
    printf("%d",a);
    改变了a对应的内容
    通常指针一般指的是指针变量。
    指针可以参加运算,只能加、减。
    加减运算根据指针的类型决定到底是加或者减几个字节。(int型加一个单位是四个字节)。
    通常是用在数组里面!!!

<7>

//指针数组
    char *strings[3] = {"ipad","Android","win8"};
    char *p = "ios";
    *(p + 1) = 'a';  错误
    printf("\n%s",p);
    注释:char string[] = "ios";
    char *p = string;  正确
    常量是不可以改变的量。"ios"是常量,是放在常量内存里面的,p指针直接指向常量了,所以不能修改。而注释中是先把常量“ios”拷贝到string里,然后指针指向string。

5、下面加一道面试题,关于指针的。

    int array1[4] = {1,2,3,4};
    int *r = array1;
    sizeof(array1) / sizeof(int);
    sizeof(r) / sizeof(*r);
    printf("\n%lu",sizeof(r) / sizeof(*r));
    这里是求不出来的,因为数组名是地址常量,sizeof指针求出来的是8.想求只能用数组名(数组名必须是传参数之前)
    void ABC(int array[],int count){  }
此时的array数组传过来的只是元素的地址,等同于int *p。
    通过指针不能求元素个数⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️

<pre name="code" class="html">


 


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值