c语言中指针的使用场合

指针对于我们搞嵌入式开发的菜鸟来说非常的重要,因为太多的地方要用到这个可恶又可爱的东西,你真的了解他吗?我们一起看看
大家共同讨论吧!
1、指针的定义
 定义一个指针char *p,通常我们都会采取刚才的方法,这句话意思是p是一个指向char类型变量的指针。当编译器看到这句话时,
认为p包含了一个char类型变量的地址,这是我们菜鸟对指针通常的理解。恭喜,理解的没错!但还太肤浅哦,我们一起深入进去吧!
2、指针使用场合I---函数调用
 定义一个函数void ilovep(int num,char *who,double *years);当我们调用这个函数时,情况就发生了变化,调用函数实例如下;
 void ilovep(num,&who,&years);这样ilovep()的3个参数就顺利的传了进来。为什么要举这样的例子呢?因为很多的小小菜鸟
经常混淆两个概念哦!(i)函数形参声明部分出现的*号是参数数据类型名的一部分,是指向... ...的指针,而在函数调用部分&符号
后面的变量就是变量本身,类型是普通的数据类型啦!
3、指针使用场合II---操作数组
程序中声明了以下两个语句,
 int szLove[18]; //定义了一个数组
    int *p;   //定义一个指向int类型的指针
现在我们可以对数组和指针进行相应的操作了,例如:
p =szLove;
因为szLove= szLove[0],所以这里就有p=szLove[0]了,即p和szLove都指向数组的第一个元素;
p = p + 1;这样写也是可以的,她等效于p = a[1];
p++;这个语句等效于 p = szLove[2];前提是你已经执行了前面的程序。

未完待续

华清远见嵌入式培训中心:http://www.farsight.com.cn   http://www.embedu.org  

### C语言指针的实现方式和原理 #### 定义与基本概念 在C语言中,指针是一种特殊的变量,用于存储另一个变量的内存地址。定义一个指针变量的方式如下:`基类型 *变量名`[^1]。例如 `int *a;` 表明 `a` 是一个指向整数类型的指针。 当声明了一个指针变量之后,可以通过将其赋值为某个变量的地址来初始化它。例如,如果有一个整型变量 `b`,那么可以通过语句 `a = &b;` 将 `b` 的地址赋值给指针变量 `a`[^1]。 #### 地址与间接访问 指针的核心作用在于能够通过存储的地址访问对应的内存单元。为了获取指针所指向的内容,可以使用解引用运算符 `*`。例如,表达式 `*a` 返回的是指针 `a` 当前所指向的那个内存位置上的值。 下面是一个简单的例子展示如何利用指针修改原始变量的值: ```c #include <stdio.h> void modifyValue(int *ptr) { *ptr = 10; } int main() { int value = 5; printf("Before modification: %d\n", value); modifyValue(&value); // 使用指针传递地址 printf("After modification: %d\n", value); return 0; } ``` 在这个程序里,函数 `modifyValue()` 改变了传入指针对应的实际变量 `value` 的数值。 #### 数组与指针的关系 数组名称本质上就是一个常量指针,表示数组第一个元素的位置。因此,对于任何合法索引 i 来说,`(array[i])` 和 `(*(array+i))` 都是等价的操作[^1]。这意味着我们可以像处理单个变量一样对待数组中的每一个成员,并且可以用指针遍历整个数组。 考虑以下代码片段说明这一点: ```c int array[] = {1, 2, 3}; for (int *p = array; p != array + sizeof(array)/sizeof(*array); ++p){ printf("%d ", *p); } // 输出将是 "1 2 3" ``` 这里循环体内部每次迭代都会打印当前由指针 `p` 所指示的数据项[^1]。 #### 函数间通信 由于指针允许直接操纵它们指向的对象,所以经常被用来作为参数传递到子过程中去改变调用者环境里的实际对象状态而无需复制大量数据结构副本[^1]。这种方法不仅提高了效率而且简化了许多复杂的算法设计过程。 比如,在排序或者查找应用场合下,如果我们希望返回多个结果,则可能需要借助于额外的结果容器;但如果采用指针形式的话,则可以直接操作输入列表本身从而减少不必要的中间过渡阶段开销[^3]。 ---
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值