IOS开发学习笔记006

C语言 指针

简单使用如下:

  int *p;//定义

  int a = 10;

  p = &a;//赋值

  int * b = &a;//定义并赋值

定义格式:类型 *指针变量名;

注意事项:

1、一定要先定义后赋值,

2、%p输出指针里面存储的地址值。

3、清空指针可以用 p = 0;或p = NULL;

代码示例

 1 #include <stdio.h>
 2
 3
 4 //结构体指针测试
 5 struct pStruct
 6 {
 7     int a;
 8     float b;
 9     double d;
10 };
11
12 //函数指针测试
13 void pFunc();
14 int main()
15 {
16     int *p ;//定义
17     int a = 1000;
18     p = &a;//赋值
19     printf("%d\n",*p);
20     printf("%lu\n",sizeof(p));//指针长度 8
21
22
23     char *cp;
24     char c = ‘a‘;
25     cp = &c;
26     *cp = ‘g‘;
27     printf("%c\n",*cp);//
28     printf("%lu\n",sizeof(cp));//指针长度 8
29
30
31
32
33
34     //指针变量中保存的时变量的地址,地址长度和类型无关,是系统固定的
35     //指针长度和指针类型无关,和系统字长有关,64位长度位8,32位4
36     printf("%lu\n",sizeof(char *));//指针长度 8
37     printf("%lu\n",sizeof(short *));//指针长度 8
38     printf("%lu\n",sizeof(float *));//指针长度 8
39     printf("%lu\n",sizeof(double *));//指针长度 8
40     printf("%lu\n",sizeof(long *));//指针长度 8
41     //函数指针
42     void (*pF)();
43     printf("%lu\n",sizeof(pF));//指针长度 8
44     //数组指针
45     int array[2];
46     int *pArray = array;
47     printf("%lu\n",sizeof(pArray));//指针长度 8
48     //结构体指针
49     struct pStruct *pS;
50     printf("%lu\n",sizeof(pS));//指针长度 8
51
52     return 0;
53 }

指针与数组

  定义一个指针,指向一个数组;

  int  array[] = {0,2,4,6,8};

  int *p = array;//array[0] ,指向首地址,数组名就是数组的首地址

代码示例

 1 #include <stdio.h>
 2 //指针和数组
 3
 4
 5 //输出
 6 void show(int array[],int n);
 7
 8 int main()
 9 {
10
11     //1、指向指针的指针
12     int a = 10;
13     int *pa = &a;//定义并初始化一级指针
14     *pa = 899;//改变变量的值
15     printf("一级指针:%d\n",*pa);
16     int **ppa = &pa;//定义并初始化二级指针,其他三级指针类似
17     **ppa = 100;//通过二级指针改变变量的值
18     printf("二级指针:%d\n",**ppa);
19
20     //2、指向一维数组的指针
21     int array[] = {0,2,4,6,8};
22     int *pArray ;//指针
23     pArray = array;//指向首地址,数组名就是数组的首地址,也可以写array[0]
24     show(pArray,sizeof(array)/sizeof(int));//输出数组,使用指针传参数
25
26     //*(++pArray);  和 *(pArray+2);的区别,数组指针的p++,p+2 是指指针向下一个元素的首地址
27     int nElement1 = * ++pArray;//2
28     pArray = array;//恢复原值
29     int nElement2 = *(++pArray);//2
30     pArray = array;//恢复原值
31     int nElement3 = *(pArray+2);//4
32     printf("*pArray++:%d \n*(pArray++):%d\n*(pArray+2):%d\n",nElement1,nElement2,nElement3);
33
34
35
36     return 0;
37 }
38
39 void show(int *array,int n )
40 {
41     //遍历数组
42     printf("数组元素:\n");
43     for (int i = 0 ; i < n; i ++)
44     {
45         printf("%d ",array[i]);
46     }
47     printf("\n");
48
49 }

指针和字符串

1、字符串变量,可修改

char str[] = "hello";

2、字符串常量,不可更改

char *p = "world";

代码示例

 1 #include <stdio.h>
 2 //指针和字符串
 3 /*
 4  1、字符串变量,可修改
 5     char str[] = "hello";
 6  2、字符串常量,不可更改
 7     char *p = "world";
 8  */
 9
10 int main()
11 {
12     //字符数组,元素可以自由更改.字符串变量
13     char str[] = "hello";
14     char *pstr1 = str;//定义指针指向字符串
15     printf("%s\n",str);
16     printf("%c\n",*(3+pstr1));
17
18     //字符串指针,这使用和str[]有本质区别,pstr2指向的字符串不能更改,是一个字符串常量
19     char *pstr2 = "world";
20     char *pstr3 = "world";//pstr3和pstr2指向同一块内存地址
21     *pstr2 = ‘A‘;
22     printf("%s\n",pstr2);
23     printf("%c\n",*++pstr2);
24
25     return 0;
26 }

函数指针和指针函数

1、返回指针的函数,就以普通函数,只不过返回值是一个指针

类型名 *函数名(参数列表);

2、函数指针,指向函数地址的指针,是一个指针,而不是函数,指向函数的首地址

返回值类型 (*指针变量名)(参数列表);

函数指针的两种使用方式:

1、 p();

2、 (*p)();

函数指针的主要用途:

  1、调用函数

  2、讲函数作为参数再函数间传递

 1 #include <stdio.h>
 2
 3
 4
 5 //返回指针的函数
 6 /*
 7  1、返回指针的函数
 8  类型名 *函数名(参数列表);
 9  2、函数指针,指向函数地址的指针
10  返回值类型 (*指针变量名)(参数列表);
11     两种使用方式:
12     1、 p();
13     2、 (*p)();
14  */
15
16 char* pFunc();//指针函数
17 int (*pf)(int ,int );//函数指针
18 int Function(int ,int);//普通函数
19
20 int main()
21 {
22     int a = 10;
23     int b = 5;
24     int c = 0;
25
26     pf = &Function;//将函数指针指向具体的函数,这是pf就相当于函数本身,不过使用更灵活
27
28     printf("%d\n",pf(a,b));//第一种引用方式
29     printf("%d\n",(*pf)(a,b));//第二种引用方式
30
31     char *addr = pFunc();//获取函数的返回值,是一个地址值
32     printf("%s\n",addr);//
33
34     return 0;
35 }
36
37 //指针函数定义
38 char* pFunc()
39 {
40     char *name = "song";
41     return name;
42 }
43
44 int Function(int a,int b)//普通函数
45 {
46     return a+b;
47 }

2015-4-12 今日如此,明日依旧。

时间: 2024-12-28 12:41:21

IOS开发学习笔记006的相关文章

IOS开发学习笔记-(2)键盘控制,键盘类型设置,alert 对话框

一.关闭键盘,放弃第一响应者,处理思路有两种 ① 使用文本框的 Did End on Exit 绑定事件 ② UIControl on Touch 事件 都去操作 sender 的  resignFirstResponder #import <UIKit/UIKit.h> @interface ViewController : UIViewController @property (weak, nonatomic) IBOutlet UITextField *txtUserName; @pro

iOS开发学习笔记:基础篇

iOS开发需要一台Mac电脑.Xcode以及iOS SDK.因为苹果设备都具有自己封闭的环境,所以iOS程序的开发必须在Mac设备上完成(当然,黑苹果应该也是可以的,但就需要花很多的精力去折腾基础环境),Xcode是一个集成开发环境,包括了编辑器.调试.模拟器等等一系列方便开发和部署的工具,iOS SDK则是开发应用所必需,不同的SDK分别对应不同的iOS版本或设备,通常我们需要下载多个iOS SDK以确保我们开发的程序能够在不同版本的iOS上正常运行. 创建新工程 Xcode提供了很多种工程模

IOS开发学习笔记-(3) 进度条、等待动画开始停止

一.创建对应空间视图  ,如下图: 二.编写对应的 .h 代码,如下 : #import <UIKit/UIKit.h> @interface ViewController : UIViewController @property (weak, nonatomic) IBOutlet UIActivityIndicatorView *activWaitNetWork; @property (weak, nonatomic) IBOutlet UIProgressView *pgrsDownLo

IOS开发学习笔记(二)-语音识别(科大讯飞)

上次简单地讲解了如何利用科大讯飞完成语音合成,今天接着也把语音识别整理一下.当然,写代码前我们需要做的一些工作(如申请appid.导库),在上一篇语音合成的文章当中已经说过了,不了解的可以看看我上次的博文,那么这次直接从堆代码开始吧. 详细步骤: 1.导完类库之后,在工程里添加好用的头文件.在视图里只用了一个UITextField显示识别的内容,两个UIButton(一个开始监听语音,一个结束监听),然后引入类.添加代理,和语音合成的一样. MainViewController.h 1 #imp

IOS开发学习笔记(1)-----UILabel 详解

1. [代码][C/C++]代码     //创建uilabelUILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(20, 40, 280, 80)];//设置背景色label1.backgroundColor = [UIColor grayColor];//设置taglabel1.tag = 91;//设置标签文本label1.text = @"Hello world!";//设置标签文本字体和字体大小label1.

IOS开发学习笔记(2)-----UIButton 详解

1. [代码][C/C++]代码     //这里创建一个圆角矩形的按钮    UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];    //    能够定义的button类型有以下6种,//    typedef enum {//        UIButtonTypeCustom = 0,          自定义风格//        UIButtonTypeRoundedRect,        

IOS开发学习笔记--语音合成(科大讯飞)

      现在语音服务越来越热,我们平时使用的很多软件都带有语音合成和识别功能,用起来也很方便.说到语音服务,Google和微软都提供过API接口,不过笔者要介绍的是国内的智能语音技术提供商---科大讯飞.之前看过一个比较Google.微软和科大讯飞语音识别引擎的博文(http://fqctyj.blog.163.com/blog/static/70843455201361955322797/),有兴趣可以去看看.笔者接触语音服务的时间也不长,对语音服务也不是很了解,但是拆解过科大讯飞的Dem

IOS开发学习笔记017-什么是IOS开发

应用程序开发流程 1.IOS开发需要思考的问题 用户是谁?不同应用程序的内容和用户体验大不相同,这取决于想要编写的是什么应用程序,它可能是儿童游戏,也可能是待办事项列表应用程序,又或者是测试自己学习成果的应用程序. 应用程序的用途是什么?赋予应用程序一个明确的用途十分重要.了解激发用户使用应用程序的动因是界定用途的一个出发点. 应用程序尝试解决什么问题?应用程序应该完美解决单个问题,而不是尝试解决多个截然不同的问题.如果发现应用程序尝试解决不相关的问题,那么最好考虑编写多个应用程序. 应用程序要

ios开发学习笔记(1)

objective-c基础总结 第一二章 1.application:didiFinishLauchingWithOptions:程序启动后立即执行 2.启动界面代码格式:self.window = [UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];//1.从Infor.plist中取出版本号NString *version = [NSBundle mainBundle].infoDictionary[key];//2.