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;

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

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

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

相关推荐
晓蛋1 天前
c语言指的是什么意思
c语言·编译器·编程开发·集成开发环境·程序实例
倒头就睡的小比特1 天前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!1 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
傲世仙尊1 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
牵猫散步的鱼儿1 天前
重载、重写(覆盖)、重定义区别
c语言
伞伞悦读1 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
猎头南楼1 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
phltxy1 天前
C 语言指针:从内存地址到灵活的数据访问
c语言
liufeiyu19761 天前
VS 2026 升级后出现错误: 找不到指定的 SDK“Microsoft.NET.Sdk”
visual studio·vs 2026
C语言小火车1 天前
C/C++ 为什么需要编译器?
开发语言·c++