C语言值传递与址传递
原创
©著作权归作者所有:来自51CTO博客作者web安全工具库的原创作品,请联系作者获取转载授权,否则将追究法律责任
高考过后,你不用告诉我你考多少分,悲喜之后也不要告诉我你志愿填了哪里,只要告诉我最后去了哪?我坐火车或飞机要多久,在此停留能否蹭口饭吃,一本二本我真的分不清楚,我只知道你是我朋友。。。
---- 网易云热评
一、值传递,形参的修改不会影响到实参
#include <stdio.h>
void jiaohuan(int a,int b) {
int tmp = a;
a = b;
b = tmp;
printf("a=%d,b=%d", a, b);
}
int main() {
int m = 1;
int n = 2;
jiaohuan(m, n);
printf("m=%d,n=%d", m, n);
system("pause");
return 0;
}
运行结果:
二、址传递,传递变量的地址
#include <stdio.h>
void jiaohuan(int *a,int *b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
int main() {
int m = 1;
int n = 2;
jiaohuan(&m, &n);
printf("m=%d,n=%d\n", m, n);
system("pause");
return 0;
}
运行结果:m=2,n=1
三、形参中的数组,不是数组,就是普通的指针
void aiyou(int a[])
void aiyou(int *a)
void aiyou(int a[10])
上面三个函数的参数都表示形参是一个数组
void aiyou(char *p[])
void aiyou(char ** p)
void aiyou(char *p[10])
上面三个函数的参数都表示形参是一个指针数组
四、查找字符串出现的次数
#include <stdio.h>
int main() {
char* p = "13aiyou4565aiyou870aiyou867456aiyou2345";
int i = 0;//计数器
char* tmp = NULL;
while (1) {
//查找匹配的字符串,找打返回地址
tmp = strstr(p, "aiyou");
if (tmp==NULL)
{
break;//跳出循环
}
else
{
i++;//找到后+1;
p = tmp + strlen("aiyou");//找到后,指针从下一处开始找
}
}
printf("aiyou出现的次数:%d\n", i);
system("pause");
return 0;
}
运行结果:aiyou出现的次数:4
五、去首尾空
#include <stdio.h>
#include <string.h>
int main() {
char* p = " aiyoubucuo ";
printf("源数据:%s\n", p);
char* s = p;//首元素地址
char* w = p + strlen(p) - 1;//尾元素地址
//去首空,首地址不为且没有到尾地址
while (*s==' '&&*s!='\0')
{
s++;
}
//去尾空,尾地址不为空且没有到首地址
while (*w==' '&& *w!=p)
{
w--;
}
int n = w - s + 1;
printf("去首尾空后的长度:%d\n", n);
char a[100] = "aaaaaaaaaaaaaaaaaaa";
strncpy_s(a, strlen(a), s,n);
a[n] = 0;
printf("去首尾空结果:%s\n", a);
system("pause");
return 0;
}
欢迎关注公众号:顺便编点程