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">