指针——C的精华
2015-07-23 09:59
211 查看
1、变量访问方式:
直接访问:按变量地址存取变量值的方式
printf("%d",i);
scanf("%d",&i)
k=i+j;
……
间接访问:将变量的地址存放在另一个变量中。
例子:
2、指针变量作为函数参数
如果将swap函数改为
3、数组与指针
引用数组元素可用下标法(如a[3]),也可用指针法(即通过指向数组元素的指针)。
指针法能使程序质量高(占内存少,运行速度快)。
int a[10];
1)、int *p=a
与 int *p=&a[0]
等价;
2)、*(p+i)
与 *(a+i)与 a[i]
与 p[i] 等价;
注意:
a++;是错误语句。数组名a是常量指针。编译器会报错。
直接访问:按变量地址存取变量值的方式
printf("%d",i);
scanf("%d",&i)
k=i+j;
……
间接访问:将变量的地址存放在另一个变量中。
例子:
#include<stdio.h> void main() { int i,j; int *pointer; pointer=&i; *pointer=3; printf("i=%d\n",i); printf("*pointer=%d\n",*pointer); printf("pointer=%u\n",pointer); }
2、指针变量作为函数参数
#include<stdio.h> void main() { void swap(int *,int *); int a,b; int *pointer1,*pointer2; pointer1=&a; pointer2=&b; a=1; b=99; printf("a=%d\n",a); printf("b=%d\n",b); swap(pointer1,pointer2); printf("After swap:\na=%d\n",a); printf("b=%d\n",b); } void swap(int *p1,int *p2) { int temp; temp=*p1; *p1=*p2; *p2=temp; }
如果将swap函数改为
void swap(int *p1,int *p2) { int *temp; *temp=*p1; *p1=*p2; *p2=*temp; }由于temp所指向的单元是不可预见的,对*temp赋值可能破坏系统的正常工作状态,运行结果为:
3、数组与指针
引用数组元素可用下标法(如a[3]),也可用指针法(即通过指向数组元素的指针)。
指针法能使程序质量高(占内存少,运行速度快)。
int a[10];
1)、int *p=a
与 int *p=&a[0]
等价;
2)、*(p+i)
与 *(a+i)与 a[i]
与 p[i] 等价;
#include<stdio.h> void main() { int a[10]={1,2,3,4,5,6,7,8,9,0}; int *p=a; printf("a[5]=%d\n",a[5]); printf("*(p+5)=%d\n",*(p+5)); printf("*(a+5)=%d\n",*(a+5)); printf("p[5]=%d\n",p[5]); }
注意:
a++;是错误语句。数组名a是常量指针。编译器会报错。
相关文章推荐
- svg字符串解析到QPushButton出现花屏问题
- cxf+spring开发(二)--- Ip地址拦截器,限制客户端Ip地址,只允许数据库中已经配置的Ip地址
- Android 隐藏软键盘
- 什么是设备控制块,它主要包括什么内容,简述其作用?
- bootstrap轮播(carousel)图片竖着显示不能轮播的问题解决办法
- 暑假集训第二周——贪心 A - Radar Installation雷达装置
- Android 如何判断是否是手机号的方法?
- IT运维怎么做?企业自主运维最靠谱!
- VDN智能升级的设置及原理
- matalb conv2函数 conv2、filter2、imfilter的区别
- [Leetcode 35, Medium] Search Insert Position
- 欢迎使用CSDN-markdown编辑器
- POJ2810完美立方
- Android 基于Message的进程间通信 Messenger完全解析
- Android 基于Message的进程间通信 Messenger完全解析
- aop事务定义
- java多线程表示10个人抢占2个位置
- 欢迎使用CSDN-markdown编辑器
- SQL left join,right join,inner join用法
- [LeetCode]Plus One