200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > c语言指针变量详解

c语言指针变量详解

时间:2019-01-23 14:15:57

相关推荐

c语言指针变量详解

**关于C语言指针变量做一些总结**

1、指针变量和普通变量

指针变量和普通变量的区别:指针变量存放的是某一个变量的地址,而普通变量存放的是值。

下面通过简单举例详细说明

unsigned int a; //定义普通变量aunsigned int *p; //定义指针变量pvoid main(void){a = 5; //给变量a赋值 5 p = &a; //取a的地址,将a的地址赋值给p}

上面的代码分析,假设变量a的地址是0x0023,指针变量p的地址是0x0078,主函数第一句将变量a赋值5,也就是a存放的数据是5,第二句是将a的地址赋值给了指针变量p,那么p存放的值是a的地址即0x0023,p自身的地址没有改变,如下图所示。

我们继续用上面的函数看看如何运用指针变量。

unsigned int a; //定义普通变量aunsigned int *p; //定义指针变量punsigned int **pt; //定义二级指针变量ptvoid main(void){a = 5; //给变量a赋值 5p = &a; //取a的地址,将a的地址赋值给p*p = 7; //此时a的值变为7pt = &p; //用指针的指针pt存放指针p的地址}

主函数第3句*p=7执行完后,指针p自身的地址没有改变,指针p存放的值即a的地址也没有改变,改变的是指针变量p指向的内容,即a的值。所以a的值变成7。

第4句是指针变量p本身的地址赋值给二级指针pt,pt是指针的指针,所以存放的是指针的地址。

用单片机仿真调试结果如下

注意点总结:

1、p是指针变量,存放的是地址(内存单元的编号)。不能给指针变量赋数据值,如p = 100,这是错误的,无法通过编译;只能赋地址值,如p = &a;

2、*p表示的是数据值,即p指针指向地址的内容。不能给*p赋地址值,如*p = &a; 这是错误的,无法通过编译;*p表示的是数据值,所以只能赋数据值。如*p = 100;或将地址值 &a 强转成数据值,如*p = (uint8_t)&a;

3、定义指针变量时的*和使用指针变量时的&意义不同。指针定义中的*,表示定义一个指针变量。(如int *p;表示定义一个int类型的指针变量)使用指针变量时的*,表示取值运算符。(如*p,表示获取指针变量p指向地址的内容)

4、*p 和 &p的区别:*取值运算符(即取地址对应的值);&取地址运算符(取变量的地址)

2、指针变量和数组

数组名就是该数组的首地址,也是数组第一个元素的地址

用指针加1来对应改变a[1]的值

用来传递参数,实现将数组b的值传递到数组c

int b[5]={2,3,4,5,6};int c[5];void fun(int *a){int i;for(i=0;i<5;i++){c[i] = *(a+i);}}int main(void){fun(b);}

通过了解清楚c语言指针变量可以对后面了解函数指针,指针函数等有所帮助

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。