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;

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

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

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

相关推荐
203号居民1 小时前
LeetCode hot 100 — 141. 环形链表2
算法·leetcode·链表
LorryJovens1 小时前
【LAAP科研】CEN因果等价网络理论---从双缝干涉到因果等价
开发语言·php
玖玥拾1 小时前
LeetCode 202 快乐数
算法·leetcode
LuminousCPP1 小时前
数据结构-二叉树(六):BFS层序遍历与完全二叉树判断|复用链式队列 + (N_0=N_2+1) 性质证明
c语言·数据结构·笔记·算法·二叉树·宽度优先
Brilliantwxx2 小时前
【Linux】 进程(10) 进程控制深度解析:创建、终止与等待
linux·运维·服务器·c语言·开发语言·网络
ZhouDevin2 小时前
算法论文/数据集3——CLD(TMLR2025)压缩训练集,仅保留对验证集有益的样本
人工智能·深度学习·算法·计算机视觉
wuyk5553 小时前
从零吃透Modbus通信|第7章:终极工程整合(模块化架构、双模式主机从机、RTOS适配、量产级模板)
c语言·stm32·学习·架构
Tim_103 小时前
【LeetCode】29、两数相除
算法·leetcode·职场和发展
卢锡荣3 小时前
国产PD3.1全集成Type-C管控芯片LDR6020P
c语言·开发语言
Freak嵌入式3 小时前
Pico UART 数据收发实战:硬件配置、MicroPython 编程
java·开发语言·单片机·嵌入式硬件·生活