iOS开发之c语言基础Lesson-08 指针 上课笔记 与 试题练习

  1 ////////////////Lesson 08 指针 课堂笔记 与练习/////////////
  2
  3     //指针:本质是一个指针变量,只不过该变量用来存储地址。
  4     //地址:内存单元的编号,也是一个数,只不过是以0x开头的十六进制数。
  5
  6     //    int a = 10;
  7     //    int *p = &a; //定义一个指针变量,将a的地址给指针变量p;p指向a
  8     //    a = 20; //直接访问
  9     //    printf("%d ", *p);
 10     //    *p = 30; //间接访问
 11     //    printf("%d ", a);
 12
 13     //一、int *, 指针变量的类型。
 14     //指针类型锁规定存储空间的大小和操作系统的位数有关, 32位 4个字节,64位 8个字节。所有类型指针变量的存储空间大小都是一样的。
 15     //int,作用:1.当通过指针变量存取数据时,一次存取多少个字节的数据。
 16     //           2.当指针变量自增时,一次增加多少个字节
 17     //int *p = NULL;定义时 *,作用:告诉编译器,后面的变量是一个指针变量,用来存储地址。
 18     //*p = 30;      使用时 *,作用:根据指针变量p中的存储的地址,找到指向的内存空间,进行存取数据操作。
 19     //*p放到=号左边是赋值操作,除此之外是取值操作。
 20     //二、p,指针变量的名字。
 21     //三、p = NULL, 指针变量初值,让指针指向一个无效的空间。
 22     //四、数据的访问方式:1.直接访问 ,直接通过变量名访问; 2. 间接访问,通过指针访问指向的内存空间。
 23
 24     //////////////////////////练习//////////////////////////////////
 25     //    int a = 30, b = 50, c = 70;
 26     //    int *p = &b;
 27     //    printf("a = %d ", a);
 28     //    printf("a = %d ", *(&b + 1));
 29     //    printf("a = %d ", *(&c + 2));
 30     //    printf("a = %d ", *(p + 1));//p + 1加一个单位,意味着加 4 个字节,又a的地址比 b 的地址高出 4 个字节,所有 p + 1 获取到 a 的地址,通过 * 获取a的内容
 31     //
 32     //    printf("a = %d ", *(&*(p - 1) + 2));
 33     //    p = &c; //指针重新赋值的过程,叫做指针重指向。
 34
 35     ////////////////
 36     //    //数组和指针的关系
 37     //    int arr[5] = {1, 3, 5, 34, 7};
 38     //    //数组名代表数组首地址,就是数组中第一个元素的地址
 39     //    int *ptr = arr;//等价于 &a[0];
 40     //
 41     //    for (int i = 0; i < 5; i++) {
 42     //        printf("%d ", *(ptr + i));
 43     //    }
 44     //    //访问数组中的第二个元素
 45     //    printf("\n%d, %d, %d, %d, %d, %d ", arr[1], *(ptr+1), *(&arr[0] + 1), *(&arr[2] - 1), *(arr + 1), ptr[1]);
 46     //    printf("1[arr] = %d ", 1[arr]);// 1[arr] == *(1 + arr), arr[1] == *(arr + 1)
 47     //
 48     //    //小结:如何访问数组a中下标为i元素?
 49     //    //a[i], i[a], p[i], i[p], *(p + i) ,*(a + i)
 50     //
 51     //    int arr[10] = {0};
 52     //    int *ptr = arr;
 53     //
 54     //    for (int i = 0; i < 10; i++) {
 55     //        *(ptr + i) = arc4random() % (40 - 20 + 1) + 20;
 56     //        printf(" %d ",  *(ptr + i));
 57     //    }
 58     //    for (int i = 0; i < 10 - 1; i++) {
 59     //        for ( int j = 0; j < 10 - 1 - i; j++) {
 60     //            if (*(ptr + j) > *(ptr + j + 1)) {
 61     //                int temp = *(ptr + j);
 62     //               *(ptr + j) = *(ptr + j + 1);
 63     //                *(ptr + j + 1)= temp;
 64     //            }
 65     //        }
 66     //    }
 67     //    for (int i = 0; i < 10; i++) {
 68     //        printf(" %d ", ptr[i]);
 69     //    }
 70
 71     //    int array[20] = {0};
 72     //    int *p = array;
 73     //    int max = 0;
 74     //    int min = 30;
 75     //    int secondMax = 0;
 76     //
 77     //    for (int i = 0; i < 20; i++) {
 78     //        *(p + i) = arc4random() % (30 - 15 + 1) + 15;
 79     //        printf("%d ",*(p + i));
 80     //
 81     //        if (*(p + i) > max) {
 82     //            secondMax = max;
 83     //            max = *(p + i);
 84     //        }else if(*(p + i) < max && secondMax < *(p + i)){
 85     //            secondMax = *(p + i);
 86     //        }
 87     //
 88     //        min = *(p + i) < min ? *(p + i) : min;
 89     //
 90     //    }
 91     //    printf("\nMax = %d, secondMax = %d, Min = %d ", max , secondMax, min);
 92
 93
 94
 95     //    short sarr[5] = {257,2,3,4,5};
 96     //    short *cp = sarr;
 97     //    printf("%d", *(cp));
 98     //
 99     //////小结:指针变量的类型,要和它指向的数据的类型一致。
100
101
102     ////////////指针和字符串(一维字符数组)的关系
103
104     //    char string[] = "I am Here, There is Lanou iOS!";
105     //    char *ptr = string;
106     //    //printf("%s ", ptr); //%s:工作原理,给定一个开始地址,一个一个字符的输出,直到遇到‘\0‘ 结束。
107     //    while (*ptr) {
108     //        printf("%c", *(ptr++));
109     //    }
110     //    //strcpy(),工作原理:给定目的字符串,以及源字符串开始地址,从源字符串一个一个字符的开始拷贝到目的字符串的开始地址,直到将源字符串的 ‘\0‘ 拷贝完成结束。
111     //
112
113
114     //求空格个数,并将空格替换成@
115     //    char string[] = "I am Here, There is Lanou iOS!";
116     //    char *ptr = string;
117     //    int num = 0;
118     //        while (*ptr) {
119     //            if (*ptr == ‘ ‘) {
120     //                num++;
121     //                *ptr = ‘@‘;
122     //            }
123     //            ptr++;
124     //        }
125     //    ptr = string;  //需要将ptr重新指向string
126     //    printf("%s\n空格个数:%d", ptr, num);
127
128
129     ////////小结
130     //数组和指针的区别:
131     ///////////
132     //1.所占的存储空间大小:
133     //   数组,数组空间大小 = 数组元素个数 * 每个元素的存储空间大小
134     //   指针变量:空间大小只和操作系统的位数有关系,32位 4 个字节, 64位 8 个字节。
135     //2.可修改性:
136     //   数组:数组名代表数组的首地址,地址是常量地址,不可修改。
137     //   指针:本质是一个变量,值可以被修改,指针重新赋值的过程,叫做指针重指向。
138
139     //////常量和变量的区别://///
140     //    ptr2指向常量去的字符串,常量去的内容不能更改
141     //    ptr1指向栈区的字符数组,数组是可变的,可以修改数组的内容。
142
143     //    char str[] = "iPhone"; //将常量区的字符串拷贝到栈区(字符数组str)中
144     //    char *ptr1 = str;
145     //    char *ptr2 = "iPhone"; //ptr2存储常量字符串iPhone首地址。只提供地址,不拷贝字符串,
146     //    strcpy(ptr1, "Android");
147     //
148     //    printf("%s ", ptr1);
149
150     ////////指针数组/////////
151     //数组中的每一个元素,都是指针变量,用来存储地址。
152
153     //    char *strings[3] = {"iPhone", "Android", "Blackbarry"};
154     //    //
155     //    for (int i = 0; i < 3 - 1; i++) {
156     //        for (int j = 0; j < 3 - 1 - i; j++) {
157     //            if(strcmp(strings[j], strings[j + 1]) > 0){
158     //                char *temp = strings[j];
159     //                strings[j] = strings[j + 1];
160     //                strings[j + 1] = temp;
161     //            }
162     //        }
163     //    }
164     //    for (int i = 0; i < 3; i++) {
165     //        printf("%s ", strings[i]);
166     //    }
167     

课后作业

 1  //*****************Lesson-08  指针  练习************
 2
 3     //    char string[] = "iPhone"; //string为数组名
 4     //    char *p = string;   //指向字符数组?首地址
 5     //    *(p + 1) = ‘v‘; //操作单个字符
 6     //    printf("%s", p);    //操作整个字符串
 7     //
 8     //    int i = 0;
 9     //    while(*p != ‘\0‘)
10     //    {
11     //        i++;
12     //        p++;
13     //    }
14     //    printf("\n字符串的长度:%d",i);
15     //
16     //
17     //    //指针数组
18     //    char *strings[3] = {"iOS", "Android", "WP"};
19     //
20     //    for (int i = 0; i < 3; i++) {
21     //        printf("\n%s",strings[i]);
22     //    }
23     //
24     //*****************Lesson-08  指针  作业************
25     //    1.(**)编写一个函数,交换 2 个浮点数.
26     //    float a = 5.67;
27     //    float b = 7.89;
28     //    float *p1;
29     //    float *p2;
30     //    p1 = &a;
31     //    p2 = &b;
32     //    swap(p1, p2);
33     //
34     //    printf("\na = %.2f,b = %.2f", a, b);
35
36
37     //    2.(***)在主函数中输入 6 个字符串(二维数组),对他们按从小到大的顺序排序,然后输出这 6 个已经排好序的字符串。要求使用指针数组进行处理。
38     char *strings[6] = {"how", "love", "are", "ying", "wewew", "ashen"};
39     char *temp;
40     for (int i = 0; i < 5; i++) {
41         for (int j = i + 1; j < 6; j++) {
42
43             if(strcmp(strings[i], strings[j]) > 0)
44             {
45                 temp = strings[i];
46                 strings[i] = strings[j];
47                 strings[j] = temp;
48             }
49         }
50     }
51     for (int i = 0; i < 6; i++) {
52         printf("%s\n",strings[i]);
53     }
54
55     return 0;
56 }
57 void swap(float *p1, float *p2)
58 {
59     float temp = *p1;
60     *p1 = *p2;
61     *p2 = temp;
62 }
时间: 2024-10-23 19:01:17

iOS开发之c语言基础Lesson-08 指针 上课笔记 与 试题练习的相关文章

iOS开发之c语言基础Lesson-11 函数指针 上课笔记 与 试题练习

main.m 文件 9 #import <Foundation/Foundation.h> 10 #import "Pointer.h" 11 ////////////////Lesson 11 函数指针 课堂笔记 与 习题练习//////////// 12 13 14 //函数指针:指向函数的指针叫做函数指针,用来存储函数的地址 15 //函数名代表函数的入口地址 16 17 18 //回调函数; 函数指针变量,存储对应的函数的地址 19 //给函数指针类型,取一个新的名

李洪强iOS开发之OC语言基础知识

OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能的类. 术语:OO面向对象.OOP面向对象编程   二.类 (一)关于类 类的设计只关注三个东西:类名.属性和方法 注意:一般名词都是类,拥有相同属性和行为的对象都可以抽象为一个类,类名是标识符的一种,需要符合规范,通常类名的第一个字母大写,且不能有下划线,如果有多个单词则使用驼峰标识.在对方法进行

iOS开发之c语言基础 扩展知识点 及 企业面试题

1 // 2 // main.m 3 // LessonScale 4 // 6 // Copyright (c) 2015年 Ashen. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h> 10 //当程序编译时,只会编译.m文件,不会编译.h文件 11 //#import 比 #include ,要略胜一筹,等通过#import多次导入头文件时,只会将内容拷贝一次 12 #import "Header.

iOS开发之c语言基础Lesson-10 动态内存管理 上课笔记 与 试题练习

//函数声明 int max(int a, int b); char * getString(); int main(int argc, const char * argv[]) { //////////////////Lesson 10 动态内存管理 课堂笔记 和 练习 ///////复习上周所学 /////////常量和变量的区别: //常量中的内容不能被修改,只能访问: //变量中存储的数据时可以随时修改的. // //const 关键字的作用: 修饰变量不可改变.当做常量使用 //  c

我是黑马-----ios开发之C语言基础

C语言在学习中的重难点: 1)运算符:自增,自减. 2)进制:各种进制转换.原码.反码.补码. 3)数组:一维数组,二维数组,多维数组. 4)循环:多重循环嵌套.查找.排序. 5)函数:普通函数调用.递归函数的调用. 6)指针:一级指针.多级指针.数组指针,指针和数组.函数.结构体.之间的关系. 7)内存管理:C语言的内存管理问题.内存泄露.野指针. 8)有参宏及条件编译. 9)多文件开发 前期学习C语言的关键输入输出函数:printf()和scanf() a++与++a的区别: 运算的顺序就是

李洪强iOS开发之OC语言前期准备

OC语言前期准备 一.OC简介 Oc语言在c语言的基础上,增加了一层最小的面向对象语法,完全兼容C语言,在OC代码中,可以混用c,甚至是c++代码. 可以使用OC开发mac osx平台和ios平台的应用程序. 拓展名:c语言-.c  OC语言.-m  兼容C++.-mm 注:其实c语言和oc甚至任何一门语言都只是我们为了实现一些功能,达到一些效果而采用的工具,抛开语法的差别外,我想最重要的应该是在解决问题的时候考虑的角度和方法不一样而已,然而这也构成了学习一门语言的重要性. 二.语法预览 (一)

李洪强iOS开发之OC语言类的深入和分类

OC语言类的深入和分类 一.分类 (一)分类的基本知识  概念:Category  分类是OC特有的语言,依赖于类. 分类的作用:在不改变原来的类内容的基础上,为类增加一些方法. 添加一个分类: 文件结构图: 在分类中添加一个方法 Study方法的实现 测试程序: (二)分类的使用注意 (1)分类只能增加方法(包括类方法和对象方法),不能增加成员变量 (2)在分类方法的实现中可以访问原来类中的成员变量: (3)分类中可以重新实现原来类中的方法,但是会覆盖掉原来的方法,导致原来的方法无法再使用(警

李洪强iOS开发之C语言重难点

  C语言学习的重难点 写程序的三个境界: 照抄的境界,翻译的境界,创新的境界 1  伪代码: 描述C语言的编程范式 范式: 规范的一种表示 对于C的范式学会的话,C, C++ Java 都会了 2 运算符的自曾与自减 3 进制转换与数据在内存中的表示 4 循环嵌套 5 多维数组 6 函数递归 7 指针-是一把双刃剑 8 内存管理 9 待条件的宏

李洪强iOS开发之OC语言BLOCK和协议

OC语言BLOCK和协议 一.BOLCK (一)简介 BLOCK是什么? 苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. BOLCK和函数的相似性: (1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样. 标识符 ^ (二)基本使用 (1)定义BLOCK变量 Int (^SumBlock)(int,int);//有参数,返回值类型为int Void (^MyBlock)()://无参数,返回值类型为空 (2)利用block封装代