一. 简介
前面几篇学习了 C语言中基础问题,文章如下:
常见C语言基础题说明一-CSDN博客
常见C语言基础说明二:位运算问题-CSDN博客
常见C语言基础说明三:static修饰的函数或变量-CSDN博客
常见C语言基础说明四:#define宏定义与 a---CSDN博客
常见C语言基础说明五:数组名当函数参数传入-CSDN博客
本文继续学习 嵌入式C开发中,可能涉及的一些C语言基础问题。
二. 常见C语言基础说明六:向函数参数传值与取数组元素
1. 向函数中传值
有如下代码,计算运行结果:
#include <stdio.h>void fun(int a, int b, int c)
{c = a*3+b+1;c++;
}int main(void)
{int value = 20;fun(5, 7, value);printf("%d\n", value);return 0;
}
打印结果:
20
分析如下:
这里调用函数,只是将变量 value 的值传入函数内部,向函数参数传递值,什么也改变不了。
所以,输入结果为 20。
2. 数组元素访问 (*buf )
有如下字符串拷贝代码,输入结果是多少?
#include <stdio.h>
#include <string.h>int main(void)
{char str1[15] = "china red";char str2[15] = "china green";strcpy(str1, str2);printf("%c, %c\n", *str1, *(str1+1));return 0;
}
输入结果为:
c, h
分析如下:
数组元素的访问方式:
(1) 利用下标
例如, buf[0] ,buf[1] 等等
(2) 利用指针常量访问,也就是地址法
例如, *buf, *(buf+1) 等依次类推。
这里 buf是数组的首元素的地址,*buf即取出地址中的数据,也就是 首元素数据。
(3) 利用指针法
例如,这里可以定义(一个数组元素) char类型的指针 ptr,ptr = &a,则 *ptr就是第一个元素,然后依次类推,可以访问到所以的元素。
综上所述 ,上面代码中 *str1即取出首元素,则 *(str+1) 即取出第二个元素。