2013-7-12学习笔记

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

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

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));

}

相关文章
|
4月前
|
数据采集 数据可视化 数据挖掘
学习笔记pirate
- 使用Python的`sklearn`进行数据预处理,包括AdaBoost回归器的网格搜索调优,处理时间序列数据,并执行数据可视化。 - 应用`transformers`库对预训练的语言模型进行微调,针对RTE、MRPC和SST-2任务进行文本分类,使用PEFT(Pointer Enhanced Fine-Tuning)模型。 - 进行图像分割任务,包括图像预处理、定义数据集、训练DeepLabV3 ResNet50模型。
|
5月前
QuantLib学习笔记——InterestRate的应用
QuantLib学习笔记——InterestRate的应用
39 0
|
机器学习/深度学习 人工智能 调度
学习笔记6
人工智能课程
68 0
|
Kubernetes Cloud Native Linux
K8S 初识_K8S 初识 | 学习笔记
快速学习 K8S 初识_K8S 初识
134 0
K8S 初识_K8S 初识 | 学习笔记
|
开发者 索引
matchAllQuery | 学习笔记
快速学习 matchAllQuery
matchAllQuery | 学习笔记
|
消息中间件 Dubbo 算法
总结|学习笔记
快速学习总结
总结|学习笔记
|
Scala 开发者
ListBuffer 的使用 | 学习笔记
快速学习 ListBuffer 的使用
ListBuffer 的使用 | 学习笔记
|
弹性计算 缓存 Linux
使用 syncthing | 学习笔记
快速学习使用 syncthing,介绍了使用 syncthing 系统机制, 以及在实际应用过程中如何使用。
使用 syncthing | 学习笔记
|
C++ 开发者 Python