C语言编程入门——指针(上)
来源:互联网 发布:经济学最优化 编辑:程序博客网 时间:2024/06/03 06:59
指针,是C语言的灵魂,也是C语言与其他高级编程语言不同的地方,它可以灵活的操作内存,同样,也会带来很多问题,需要安全的使用指针。
指针变量是指存放变量地址的变量,刚开始学可能会有点困难,需要多多理解。
指针常见错误1:
# include <stdio.h>int main(void){int * p; //定义int类型变量指针pint i = 3;*p = i; //此语句错误,*p未初始化,p存放了未知的地址,指向了未知的变量,如果被i修改,则会导致错误。printf("%d\n", *p);return 0;}
指针常见错误2:
# include <stdio.h>int main(void){long * p;double * q;int i = 3;double j = 5.5;long m = 5.5;//p = &j;//错误。//p = &m;//错误。//q = &i;//错误。//p = &i;//错误。 //注意:指针变量中,不同类型之间即使不会丢失精度,也不能够相互赋值。printf("%d\n", *p);printf("%lf\n", *q);return 0;}
经典指针程序——互换两个数:
/*2013年1月22日17:31:51本程序可说明指针使函数返回多个值此处涉及到值传递、指针传递和引用传递的区别:值传递是将i、j的值复制给swap函数;指针传递是swap函数中的a,b指向主函数的i,j。引用传递是swap函数中的a,b与主函数的i,j是同一个数,可认为a,b是i,j的别名。具体此处不再赘述,在以后的学习中将会理解。虽然指针传递与引用传递类似,但不可将指针与引用混为一谈,即不可认为指针就是引用,引用就是指针。若不使用指针,则输出结果为:a = 5, b = 3 //即说明在函数内部数值已交换。i = 3, j = 5 //而在主函数内部数值未交换。*/# include <stdio.h>//本函数为值传递,无法完成互换的要求。void swap_1(int a, int b){int t;t = a;a = b;b = t;printf("a = %d, b = %d\n", a, b);return;}//本函数为指针传递,但内部书写错误,将指针变量(地址)互换,指向互换,即原指针变量p指向a,q指向b,互换后,p指向b,q指向a。void swap_2(int * p, int * q){int * t; //同类型才可相互赋值,所以将变量t定义为 int * 类型。t = p;p = q;q = t; //即p、q是指向i,j的指针变量,更改p、q的值不会改变i,j的值,p,q,i,j是四个不同的变量。return;}//本函数为指针传递,可以完成相互要求。void swap_3(int * p, int * q){int t;t = *p;*p = *q;*q = t; //*p即为a,*q即为b,此处即为主函数中a,b互换。换言之:*p与a为同一变量,*q与b为同一变量。return;}int main(void){int i = 3;int j = 5;//swap_1(i, j);//swap_2(&i, &j);swap_3(&i, &j); //指针传递,实参传递的应与形参类型一致,即传递地址,&i, &j。printf("i = %d, j = %d\n", i, j);return 0;}
指针热身程序:
# include <stdio.h>int main(void){int * p; //定义整形指针变量,p是指针变量的名字,int * 表示p变量存放的是int类型变量的地址。 //p变量为int * 类型,即存放int变量地址的类型。int i = 3;p = &i;/*1. p保存了i的地址,因此p指向i,通过p可以找到i。2. p不是i,i也不是p,p与i是两个不同的变量。更准备地说:修改p的值不影响i的值,修改i的值不影响p的值。3. 如果一个指针变量指向了某个普通变量,则*指针变量 就完全等同于 普通变量例:如果p是个指针变量,并且p存放了普通变量i的地址则p指向普通变量i*p 就完全等同于 i, *p == i (*是取地址&的逆运算,可认为是取出指针所指向的普通变量。)或者说:在所有出现*p的地方都可以替换成i(除定义声明外)在所有出现i的地方都可以替换成*p*p 表示以p的内容为地址的变量所以,*p 就是 i,修改 *p 的值就是修改i的值。*/printf("i = %d\n", i);printf("i = %d\n", *p);*p = 99; //即修改了i的值。printf("i = %d\n", i);printf("i = %d\n", *p);return 0;}
1 0
- C语言编程入门——指针(上)
- C语言编程入门——指针(下)
- C语言编程入门——循环(上)
- C语言编程入门——数组(上)
- C语言编程入门——程序练习(上)
- C语言编程入门——函数(上)
- C语言编程入门——结构体(上)
- C语言编程入门——指针与函数、数组
- c语言—指针(入门1)
- C语言——指针入门
- C语言入门——指针(一)自学总结
- Linux上C语言编程入门
- c 语言入门指针
- C语言指针入门
- C语言指针入门
- C语言 指针入门
- C语言编程入门——HelloWorld!
- C语言编程入门——链表
- 【一个小实验】找出两个数组中相同的元素
- laravel框架安装
- CSS基础-34Less 介绍和应用,需要反复看视频
- osgi 运行错误
- 小布老师QTP视频
- C语言编程入门——指针(上)
- CSS基础-35SASS 介绍和应用,反复看视频理解
- 八大算法一一道来
- HDU 2255 — 奔小康赚大钱 KM入门题
- CSS基础-36双飞翼布局代码实战
- android-ADB server didn't ACK 问题
- ZOJ3886 2015July月赛 F-Nico Number(线段树)
- 数据压缩与信息熵
- hdu 1299 Diophantus of Alexandria(数论(因子个数和))