C语言回顾(七、多重指针,argc,argv,动态内存分配,void指针,const)——iOS开发基础


说明:
在学习UI高级知识之前,将利用最近十来天的时间回顾一下C语言,主要按照《C程序设计(谭浩强版)》来回顾。
整理一些知识点(不是细节,知识个人觉得较重要或易忘的)以及挑一些课后题目或经典习题编写代码练习。


第8章 善于利用指针


1、多重指针:指向指针的指针
较简单,主要还是对指针,地址,内容三者关系的理解,理解透彻了,指针的内容都很简单。

2、指针数组作main函数的形参
下列是Xcode最开始的main函数,当然形参也是可以去掉或者写void的。
int main(int argc, const char * argv[])
argc:argument count缩写,参数个数
argv:argument vector缩写,参数向量,是一个char*的指针数组,数组中的每一个元素(其值为指针)指向命令行中得一个字符串。

3、动态内存分配
栈区(stack):非静态的局部变量(包括形参)分配在内存中的动态存储区(全局变量在静态存储区);
堆区(heap):存放临时用的数据(不需要在程序的声明部分定义,也不用等到函数结束才释放,随时开辟,随时释放)的内存动态分配存储区。
动态内存分配函数:

函数原型功能
mallocvoid *malloc(size_t);在堆区申请长度为size的连续空间,返回值是所分配区域的第一个字节的地址,基类型void即不指向任何类型的数据,只提供一个地址
callocvoid *calloc(unsigned n, size_t);在堆区申请长度为n个长度为size的连续空间,空间一般比较大,足够保存一个数组
freevoid free(void *p);释放指针变量p所指向的已分配的动态空间
reallocvoid *realloc(void *p, size_t);已通过malloc或calloc获得动态空间,利用realloc改变其大小,重新分配,p值不变

上述的函数声明都包含在stdlib.h头文件中

4、void指针类型:“指向空类型”或“不确定指向的类型”

int a = 3;
void *p;
p = &a;

p = &a 由于p是空类型,赋值后p得到a的纯地址,并不指向a,所以不能通过*p输出a的值。
使用注意:把void类型赋值给不同基类型的指针变量(或相反)时,编译系统会自动进行转换,不必进行强制转换。当然转也没错。

5、指针变量可以为空值:不指向任何变量p = NULL;
其中NULL是一个符号常量,代表整数0.
在stdio.h头文件中对NULL的定义是#define NULL 0,使得p指向地址为0的单元
注意:赋NULL跟不赋值是不一样的,前者有值为0,不指向任何变量;后者并非意味着p无值,而是一个无法预料的值,可能指向一个实现未指定的单元,很危险!所以一般要赋值!

6、const与指针变量

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int a;
    const int *p1;              //语法上是不能改变*p1的值,但是能改变p1的值,就是能改地址不能改地址所指内容
    int const *p2;              //能改地址,不能改内容
    int *const p3;              //能改内容,不能改地址
    p1=&a;
    *p1=1;

    return 0;
}

运行时有错误的!

    p1=&a;
    *p1=1;

这两行其中一行会出错,通过修改p1,p2,p3运行即可知道其含义,地址或所指内容可不可改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值