2013-7-12学习笔记

简介:

形参改变影响实参主要应用在以下几个方面:

1.用于外部函数要交换主函数中的两个值,可以用指针来实现,但通过指针来实现主函数中两个数的交换必须要知道,哪些类型属于值传递,哪些类型属于地址传递,对于值传递的那些类型(例如:整形、字符型)才有必要用指针来实现,因为数组,字符串属于地址传递类型,所以没必要在外部函数通过用指针来实现主函数中的两个数的交换。举例:

2013-7-12 - 蓬莱仙羽 - IT达人的博客

2.在开辟空间的时候使用二级指针来实现主函数中指针内存的开辟,不然如果不用二级指针的话就必须在外部开辟空间的函数有一个返回值类型,然后赋值给主函数中的指针,如果不通过这两种方法实现的话就可能引发内存问题,举例:

方法 一、通过在外部开辟空间的函数里有返回指针类型,然后赋值给主函数中的指针的方法,来实现主函数中指针空间的开辟

2013-7-12 - 蓬莱仙羽 - IT达人的博客

方法二、通过二级指针来实现对主函数中指针的赋值,所谓二级指针就是指向指针的地址

2013-7-12 - 蓬莱仙羽 - IT达人的博客



数组存放的问题

int a[]={2,3,4};

int *p=a;

int *q=&a[0]; //跟第一种情况一样,都是指向数组第一个元素的首地址

int *k=&a;  //将数组a当做整体,如果k++,那就指向末尾了


strcpy标准写法

//断言

char * func(cahr *pDest, const char *pBegin)

{

assert(pDest !=NULL && pBegin != NULL);  //意思就是如果这两个有一个为空,就不向下执行,返回一个message或者提示什么的

char *pReturn = pDest;

while((*pDest++ == *pBegin != '\0'));

return pReturn;

}


有关指向数组指针的地址问题

#include <stdio.h>

void func(int a[4])   //这儿编译器不会把它当做数组,只是会当做指针而已

{

    printf("形参的字节大小:%d\n",sizeof(a));    //形参数组,编译器只会把它当做指针

}


int main(int argc, const char * argv[])

{

    int a[]={1,2,3,4};

    func(a);

    int *p=a;

    int *k=&a[0];

    int *q=&a;

    int *j=&a+1;//把a数组当做整体加一,跟上面的q+1不一样q+1只是将数组的首地址+1

    printf("P,k,q的地址:%d %d %d\n",p,k,q);

    printf("数组a的内存大小是多少字节:%d\n",sizeof(a));

    printf("++P:%d\n",++p);

    printf("++k:%d\n",++k);

    printf("&a+1:%d\n",&a+1);

    printf("++q:%d\n",++q);

    printf("&a+1,将数组作为一个整体+1:%d\n",j);

    printf("j+1,将数组作为一个整体+1:%d\n",j);

    printf("取出数组的最后一个数:%d\n",*(j-1));

    //++的话要看它的偏移是以哪种类型偏移的,char*p,p++,就是以字符型字节长度为单位长度+1;int *p=&a+1;偏移是以整个数组的字节长度为单位长度加一

    return 0;

}

运行结果:

形参的字节大小:8

P,k,q的地址:1606416448 1606416448 1606416448

数组a的内存大小是多少字节:16

++P:1606416452

++k:1606416452

&a+1:1606416464

++q:1606416452

&a+1,将数组作为一个整体+1:1606416464

j+1,将数组作为一个整体+1:1606416464

取出数组的最后一个数:4


int a[]={1,2,3};

int *p=a+1;

printf("%d",a);

printf("\n%d",p);

printf("\n%d",++p);

运行结果:看出来++p跟a+1是等价的,单位长度都是int型的单位长度

1606416332

1606416336

1606416340


获取当前时间(C语言)

#include <stdio.h>

#include <time.h>

#include <string.h>

int main(int argc, constchar * argv[])

{

    time_t now;

    structtm *timenow;

    time(&now);

    timenow = localtime(&now);

    char *p = asctime(timenow);

    printf("当前时间是:");

    printf(p);

    printf("%d",strlen(p));

}















本文转蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366565,如需转载请自行联系原作者

相关文章
|
人工智能 弹性计算 边缘计算
2020年国内十大云计算商排名榜
云计算在中国经过数年发展后,技术和市场都越发成熟。随着性能和稳定的提高,成本的降低,个人和企业用户都开始逐步接受云服务,但无论在全球范围还是中国范围内,云计算市场还只是起步阶段。 中国云市场来看,表面看似巨头已经瓜分天下,但实际上,出色的新秀在不断涌现,利用自己的特色优势在细分市场中分一杯羹。笔者根据企业实力,产品性能、性价比、服务评价等方面选出了市场认可度高的中国十大公有云计算服务商云计算服务商。
|
人工智能 监控 负载均衡
一文详述:AI 网关与 API 网关到底有什么区别?
近年来,AI发展迅猛,大模型成为推动业务创新的关键力量。企业面临如何安全管理和部署AI应用的挑战,需设计既能满足当前需求又可适应未来发展的基础架构。AI网关应运而生,在集成、管理和优化AI应用中扮演重要角色。本文探讨AI网关与API网关的区别,分析AI系统为何需要专门网关,并提供选择合适AI网关的建议。AI网关不仅支持多种模型,还具备高级安全性和性能优化功能,有助于企业在复杂环境中灵活应用AI技术。
607 1
|
Prometheus Kubernetes 监控
在K8S中,Pod处于OOM状态如何排查?
在K8S中,Pod处于OOM状态如何排查?
|
缓存 监控 负载均衡
提高服务器CPU使用率
提高服务器CPU使用率
1330 8
|
SQL 分布式计算 负载均衡
Hive数据倾斜的原因以及常用解决方案
Hive数据倾斜的原因以及常用解决方案
|
存储 IDE 开发工具
Python中变量命名规则
【8月更文挑战第5天】
621 4
|
缓存 前端开发 搜索推荐
【Flutter前端技术开发专栏】Flutter中的自定义绘制与Canvas API
【4月更文挑战第30天】Flutter允许开发者通过`CustomPaint`和`CustomPainter`进行自定义绘制,以实现丰富视觉效果。`CustomPaint` widget将`CustomPainter`应用到画布,而`CustomPainter`需实现`paint`和`shouldRepaint`方法。`paint`用于绘制图形,如示例中创建的`MyCirclePainter`绘制蓝色圆圈。Canvas API提供绘制形状、路径、文本和图片等功能。注意性能优化,避免不必要的重绘和利用缓存提升效率。自定义绘制让Flutter UI更具灵活性和个性化,但也需要图形学知识和性能意识。
271 0
【Flutter前端技术开发专栏】Flutter中的自定义绘制与Canvas API
|
移动开发 Java 数据安全/隐私保护
钉钉一键登录第三方网站
钉钉一键登录第三方网站,这里主要记录一键登录整个实现步骤。登录页面构造好钉钉一键登录链接后的页面效果。
钉钉一键登录第三方网站
阿里云注册域名创建信息模板流程及审核时间说明
阿里云注册域名所有者没有信息模板,新创建的信息模板已经提交,审核需要多长时间?着急
529 0
阿里云注册域名创建信息模板流程及审核时间说明
|
存储 机器学习/深度学习 人工智能

热门文章

最新文章