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

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

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

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

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

数组存放的问题

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,如需转载请自行联系原作者

2013-7-12学习笔记相关推荐

  1. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引...

    Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引 原文:Introduction to 3 ...

  2. Qt 5.12学习笔记--QML性能策略

    Qt 5.12学习笔记--QML性能策略 1 简介 2 时间因素 2 性能分析 3 JavaScript 部分 4 绑定 5 类型转换 6 解析属性 6 属性绑定 7 序列提示(Sequence ti ...

  3. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十九章:法线贴图

    Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十九章:法线贴图 原文:Introduction to 3D Game P ...

  4. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十三章:计算着色器(The Compute Shader)...

    Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十三章:计算着色器(The Compute Shader) 原文: Int ...

  5. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十一章:环境光遮蔽(AMBIENT OCCLUSION)

    学习目标 熟悉环境光遮蔽的基本思路,以及通过光线跟踪的实现方法: 学习如何在屏幕坐标系下实现实时模拟的环境光遮蔽. 1 通过光线追踪实现的环境光遮蔽 其中一种估算点P遮蔽的方法是光线跟踪.我们随机跟踪 ...

  6. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第四章:Direct 3D初始化

    学习目标 对Direct 3D编程在3D硬件中扮演的角色有基本了解: 理解COM在Direct 3D中扮演的角色: 学习基本的图形学概念,比如存储2D图像.页面切换,深度缓冲.多重纹理映射和CPU与G ...

  7. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引

    代码工程地址: https://github.com/jiabaodan/Direct12BookReadingNotes 学习目标 回顾视景坐标系变换的数学算法: 熟悉第一人称摄像机的功能: 实现第 ...

  8. c# 两个list比较_C# for Grasshopper Day 22 学习笔记

    前情提要:C# for Grasshopper - Day 1-1 学习笔记C# for Grasshopper - Day 1-2 学习笔记C# for Grasshopper - Day 2-1 ...

  9. 《算法笔记》学习笔记(1)

    <算法笔记>学习笔记(1) 2021/4/7号 晚上21:36开始学习 第二章 c++/c快速入门 有的时候不要在一个程序中同时使用cout 和 printf 有的时候会出现问题. 头文件 ...

  10. Java程序猿的JavaScript学习笔记(12——jQuery-扩展选择器)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

最新文章

  1. mysql外键约束视频教学_外键约束案例_MySQL数据库 快速入门 基础+实战 视频教程_MySQL视频-51CTO学院...
  2. 跟我一起学.NetCore之Asp.NetCore中集成Autofac扩展
  3. layer.open 强化1
  4. Yarn 国内加速,修改镜像源
  5. 2020 从新开始:你应该知道的Oracle认证新变化
  6. 企业局域网——论文开题报告
  7. 基于Docker布署伪分布式hadoop环境(一)
  8. 时间序列分析--移动平均法预测模型
  9. 小孩儿学计算机可以学些什么,基础知识
  10. excel合并两列内容_Python实战:合并 Excel 表格
  11. 【老九君】【Java】集合框架
  12. matlab由自相关函数求功率谱密度,转:matlab求功率谱密度代码实例
  13. ERROR ITMS-4238
  14. UG NX二次开发(C#)-装配-添加组件AddComponent
  15. 大数据技能大赛题目(高职组,模块C和D)
  16. 安排几款实用的内网穿透工具+教程
  17. 云从MGN《Learning Discriminative Features with Multiple Granularities for Person Re-Identification》论文阅读
  18. python DataFrame数据合并 merge()、concat()方法
  19. Paper:机器学习、深度学习常用的国内/国外引用(References)论文参考文献集合(建议收藏,持续更新)
  20. 专项测试之Web测试

热门文章

  1. 科普| 越来越火的图数据库究竟是什么?
  2. 这个图片转文字功能搞一下?还好这个开源项目救了我!
  3. Java 代码精简之道
  4. Spring Cloud 中国社区一周年技术沙龙-北京站
  5. 考那么多试,拿那么高分,大模型们真的懂语言了吗?
  6. 空中悬停、翻滚转身、成功着陆,我用强化学习「回收」了SpaceX的火箭
  7. 反向 Dropout!韩松团队最新工作NetAug:提高Tiny神经网络性能的新训练方法
  8. 阮一峰在 GitHub 又一开源力作!
  9. 比Keras更好用的机器学习“模型包”:无需预处理,0代码上手做模型
  10. 使用Python可视化卷积神经网络方法汇总