c语言中srtlen(指针使用计算字符长度)、传值和传址调用

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

//#define NDEBUG

#include<string.h>//strlen求字符串函数

#include<assert.h>//assert断言函数

//指针的使⽤和传址调⽤

//指针使用,strlen的模拟实现

//size_t my_strlen(const char* p)//限制动*p

//{

// size_t cound = 0;

// assert(p != NULL);//判断p不是空地址,在调试时会更加保险稳重

// while (*p)

// {

// cound++;

// p++;

// }

// return cound;

//}

//int main()

//{

// char arr\[\] = "abcdef";

// size_t len = my_strlen(arr);

// printf("%zu\n", len);

// return 0;

//}

////传值调⽤

//void swap1(int a, int b)

//{

// int c = 0;

// c = a;

// a = b;

// b = c;

//}

//int main()

//{

// int a = 10;

// int b = 20;

// printf("交换前 a = %d,b = %d\n", a, b);

// swap1(a, b);

// printf("交换后 a = %d,b = %d\n", a, b);//输出发现并没有交换

// //总结,在进行传值调用时,形参只是实参的临时数值,形参会单独创建⼀份临时空间来接收实参,对形参的修改不影响实参。

// return 0;

//}

//传址调⽤

void swap2(int* const a, int* const b)

{

assert(*a != NULL);

assert(*b != NULL);

int c = 0;

c = *a;

*a = *b;

*b = c;

}

int main()

{

int a = 10;

int b = 20;

printf("交换前 a = %d,b = %d\n", a, b);

swap2(&a, &b);

printf("交换后 a = %d,b = %d\n", a, b);//输出后交换成功

return 0;

}//总结:传址调⽤,可以让函数和主调函数之间建⽴真正的联系,在函数内部可以修改主调函数中的变量;

//所以未来函数中只是需要主调函数中的变量值来实现计算(如加减法运算)就可以采⽤传值调⽤。

//如果函数内部要修改主调函数中的变量的值,就需要传址调⽤。

相关推荐
Fu_Lin_2 小时前
《Qt嵌入式从零基础到精通》前言与阅读指南
开发语言·qt
名字还没想好☜2 小时前
Go 的 select 实战:超时、非阻塞收发与优雅退出的三个套路
开发语言·数据库·golang·go·并发
geovindu2 小时前
java: Backtracking Algorithm
java·开发语言·windows·后端·算法·回溯算法
晚风叙码2 小时前
C++ vector底层模拟实现与迭代器失效深度剖析
c++·算法
To_OC10 小时前
LC 51 N 皇后:我以为难的是回溯,结果栽在了对角线下标
javascript·算法·leetcode
Scott9999HH10 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
2401_8414956411 小时前
【操作系统】进程同步与互斥实验报告
c++·算法·操作系统·进程·并发·同步·互斥
码智社11 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海11 小时前
python 列表、元组、集合和字典
开发语言·python