IOS学习之路-- 指针&宏函数

  • 如果*p被()包住,说明指针变量p将来指向的是函数
 //声明一个指针变量
    //int (*p)(int, int) = sum;
    int (*p)(int, int);
    p = sum;

    // 如果*p被()包住,说明指针变量p将来指向的是函数

    // 最左边的void说明p指向的函数没有返回值
    // 最右边的()说明p指向的函数没有形参
    void (*p)();

    // 函数名test就是test函数的地址
    // 将test函数的地址赋值给了指针变量p
    // 指针变量p成功指向了test函数
    p = test;

    // 利用指针变量p间接调用了test函数
    //(*p)();

    //test();
    p();
  • 结构体占用的空间大小

默认情况下,一个结构体变量所占有的存储空间是所有成员的总和。

sizeof计算的结构体所占用存储空间时,返回的值必须是最大成员的倍数。

  • 结构体的省略写法

  省略了结构体的名称,这种方法没有重用性。

  在结构图的最后加入的内容是  同时定义的变量。

    struct
    {
        double width;
        double height;
    } s;

  注意: 如果想给结构体使用{}的方式一次性赋值,只能在定义变量的同事进行。

  • 结构体作为函数参数时,只是成员的值传递(修改函数内部的结构体,并不影响外面的结构体)
struct Person {
    int age;
};

// 这种方式是值传递, 不会真的改变nochange的值
void changePersonWithAge1(struct Person nochange) {
    nochange.age = 100;
}

// 这种传递的是指针,指针指向同一个内容,可以真正改变
void changePersonWithAge2(struct Person *change) {
//    (*change).age = 100;
    change->age = 100;  // 等价于上面那行。
}

int main()
{
    struct Person p1 = {5};
//    changePersonWithAge1(p1);
    changePersonWithAge2(&p1);  // 引用传递,要传递指针

    printf("%d\n", p1.age);

}
  • 宏定义:

  #define 宏名 值

  #undef 宏名

  作用:宏替换,在翻译之前,将代码中的所有宏名都替换成对应的值。

  宏名最好都用大写,跟函数区分开。可以使用在任何地方(代码段中,头部,任何地方)

// 带参数的宏定义
// 宏替换只是纯粹的文本替换,把左边的宏换成右边的东西,并不会进行任何运算
// 参数和结构都必须用()包住
#define PING_FANG(x)  ((x)*(x))
  • 预处理指令

    不能递归包含: 自己包含自己,a.h include a.h

    不能交叉包含:a.h incldue b.h, b.h include a.h

    防止.h的文件内容被包含多次。用预处理命令。  文件名用A_H的方式来定义。

 #ifndef 文件名
 #define 文件名

 ..文件内容..

 #endif
  • typedef 起别名  

  typedef int Myint

  typedef char * String1 

struct Person {
    int age;
};

// 给结构体类型起个别名 :Stu
typedef struct Person Student;

// 此结构类似与上面的内容。 是上面两行的缩写
typedef struct Dog {
    int age
} WangCai;
  • 指针的使用范围

  需要间接的修改某个变量的值。

IOS学习之路-- 指针&宏函数

时间: 2024-08-05 15:16:42

IOS学习之路-- 指针&宏函数的相关文章

IOS学习之路--OC的基础知识

运行过程 1.编写OC程序:.m源文件 2.编译.m文件为.o目标文件:cc -c xxxx.m 3.链接.o文件为a.out可执行文件:cc xxxx.o -framework Foundation 4.执行a.out文件:./a.out #import 的功能跟#include一样,只是更好用,他避免了头文件的多次包含 为了能使用OC的特性, 一定要引入#import <Foundation/Foundation.h> 类定义// @implementation 和 @end // 设计(

IOS学习之路- 运行过程

1. 执行Main函数(在main.m文件中) 2. 加载MainStoryborad.storyboard文件 * 创建ViewController文件 * 根据storyboard文件中描述创建ViewController中的UIView(父层) * 创建UIView内部的所有子控件 * 将创建好的所有UIView对象跟ViewController做相应的关联(IBAction,IBoutlet  ) 3. 将程序的第一个控制器内部的UIview显示到手机屏幕上. IOS学习之路- 运行过程

学习,是不断认识错误的过程 ---我的iOS学习之路

刚刚进入大学的的时候,觉得实验课上很会做实验的人很流弊,觉得只要上好实验课,就会成为一个 cua cua cua 很会写代码的人!然后就在实验课上捣鼓.捣鼓..捣鼓... 参加了社团,青协后就觉得其实会编程其实也没多大用,还是要锻炼一下自己其他方面的能力.因为呆在青协的宣传部,所以每回做活动的时候总会画海报,画呀画呀画,画呀画呀画,,,还会去参加各种各样的宣称活动,只要不是上课时间就青协和社团两边跑.嗯,感觉很充实.. 这种生活一直持续到大二,一次很偶然又很幸运的机会,经一个学长介绍,来到了一个

iOS学习之路--下拉刷新和上拉加载更多

iOS学习之路--下拉刷新和上拉加载更多 简介 本文中笔者将和大家分享应用app中常用到的表单内容的下拉刷新和上拉加载更多的功能实现的方法. 内容 1.有哪些实现方法与各方法的优劣 使用过美团,大众点评的朋友们应该有注意到,当你向上滑动表单的时候会有更多的店铺加载进你的表单中,而当你下滑表单顶的时候,则会刷新表单的内容并从网络上获取最新的信息.通过下拉刷新和上拉加载更多的功能,使app可以获取更多用户想要的信息和获取最新的信息.那么这种功能如何实现呢,还请跟着笔者继续往下看. 目前来说,主要的实

IOS学习之路--BLOCK

/* 1.定义block变量: 返回值类型 (^block变量名) (参数类型1, 参数类型2, ....); 2.给block变量赋值 block变量名 = ^(参数类型1 参数名称1, .....) { }; */ /* 1.设置动画属性 2.开始执行动画 3.动画执行完毕 block1 = ^{ 封装了动画开始执行前想做的事情 }; block2 = ^{ 封装了动画执行完毕后想做的事情 }; */ #import <Foundation/Foundation.h> //typedef

IOS 学习之路一 正其心

进入IT行业已经有5个年头,前3年做中间件(WAS) 数据库(ORACLE)的维护,后打算深入学习数据库,做DBA,于是跳槽到一家数据公司.没做多久的数据库,公司就安排做基于 WEB 的监控,独立开发了3个监控系统,发现这是个焦油坑--正如<人月神话>所说,萌生去意.现在回想起来,了解的技术 和用过的平台虽多,但都不精,无核心竞争力.鉴于互联网发展趋势,要么去做大数据,要么到移动互联网.大数据偏学术,而移动物联网更注重 互联网的核心--连接,于是重新上路. 技术爆破 每次技术爆破都小人物的机会

C语言学习之路——指针初探

进来学习C语言碰到了指针,着实学了一段时间,搞不出个头绪,今日感觉有些眉目,来此做个记录,也望能给困顿的人一起分享下感悟. 学习指针还要从变量,数组,函数的定义这些基础说起. 如:int a=10; int a[]={1,2,3,4}; int max (int x,int y) { .... } 学习C语言指针我想指针变量的定义就不用说了吧. 先上一个例子然后再给大家一一展开进行讲述. #include<stdio.h>int main(){int a;scanf("%d"

IOS学习之路——Swift语言(2)——基本类型与函数

一.可选型 为什么会有可选型?当一个变量被希望表示为某一个指定的类型值,同时也被希望在某种情况下表示为空.那么就需要一个可选型.Optional 可选型的语法是在Swift的基本类型后面添加 ? 符号,如 Int? String?  可选型如果取值为空,那么表示为 nil 如果想定义一个可选型的变量,那么需要显示的声明为可选型.可选型变量打印时显示Optional 可选型变量需要进行解包(unwrap)才能与其他的变量进行运算. 解包: 1. 强制解包,使用 ! 关键字,强制解包是具有风险的,当

我的IOS学习之路(三):手势识别器

在iOS的学习中,对于手势的处理是极为重要的,如对于图片,我们经常需要进行旋转,缩放以及移动等.这里做一下总结,详见代码. 1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 UIImage *image = [UIImage imageNamed:@"018.png"]; 5 UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; 6 imageView.