指针的初始化
来源:互联网 发布:怎么网络招生 编辑:程序博客网 时间:2024/05/16 06:15
指针代表的是内存单元的编号或地址,通过指针就可以找到对应的内存单元。对指针进行初始化或赋值的实质是将一个地址或同类型(或相兼容的类型)的指针赋给它,而不管这个地址是怎么取得的。
1、指针的初始化
指针初始化时,“=”的右操作数必须为内存中数据的地址,不可以是变量,也不可以直接用整型地址值(但是int*p=0;除外,该语句表示指针为空)。
对指针进行初始化时常用的有以下几种方式:
1.采用NULL或空指针常量,如:int *p = NULL;或 char *p = 2-2; 或float *p = 0;
2.取一个对象的地址然后赋给一个指针,如:int i = 3; int *ip = &i;
3.将一个指针常量赋给一个指针,如:long *p = (long *)0xfffffff0;
4.将一个T类型数组的名字赋给一个相同类型的指针,如:char ary[100]; char *cp = ary;
5.将一个指针的地址赋给一个指针,如:int i = 3; int *ip = &i;int **pp = &ip;
6.将一个字符串常量赋给一个字符指针,如:char *cp = “abcdefg”;
ANSI C定义了零指针常量的概念:一个具有0值的整形常量表达式,或者此类表达式被强制转换为void *类型,则称为空指针常量,它可以用来初始化或赋给任何类型的指针。也就是说,我们可以将0、0L、'/0'、2–2、0*5以及(void *)0赋给一个任何类型的指针,此后这个指针就成为一个空指针,由系统保证空指针不指向任何对象或函数。
ANSI C还定义了一个宏NULL,用来表示空指针常量。大多数C语言的实现中NULL是采用后面这种方式定义的:#define NULL ((void *)0)。
例如:
int a = 25;
int *ptr = &a;
int b[10];
int *point = b;
int *p = &b[0];
2、指针的赋值
int *p;
int a;
int b[1];
p = &a;
p = b;
指针的赋值,“=”的左操作数可以是*p,也可以是p。
当“=”的左操作数是*p时,改变的是p所指向的地址存放的数据;
当“=”的左操作数是p时,改变的是p所指向的地址。
常见错误:
如果:int *p;
*p = 7;
则编译器(vs2008)会提示The variable 'p' is being used without being initialized.即使用了未初始化的变量p。
因为p是指向7所在的地址,*p = 7给p所指向的内存赋值,p没有赋值,所以p所指向的内存位置是随机的,没有初始化的。
int k;
int *p;
p = &k; //给p赋值
*p = 7; //给p所指向的内存赋值,即k= 7
数组的变量名b表示该数组的首地址,因此p=b;也是正确的
同类型的指针赋值:
int val1 = 18,val2 = 19;
int *p1,*p2;
p1 = &val1;
p2 = &val2;
- 指针的初始化
- 指针数组的初始化
- 字符指针的初始化
- 指针的初始化
- 指针的初始化
- 指针的初始化
- 指针的初始化
- 关于指针的初始化
- 指针的初始化总结
- 指针数组的初始化
- 指针的初始化微程序
- 指针的初始化问题
- 指针的初始化
- 指针数组的初始化
- 指针的初始化
- 指针的初始化
- 指针的初始化
- 指针的初始化
- 7-bit整数(Integer)压缩算法
- 解决windows下配置多个网卡后无法访问外网的问题
- OAF Could not find the specified responsibility.
- 电子书:《EJB3.0 入门经典》
- oracle查询所有用户表的表名、主键名称、索引、外键等
- 指针的初始化
- MFC对话框程序EDIT类控件的自动换行,垂直滚动条自动下移
- jquery获取td所在的行和列
- OCP 1Z0 053 188
- 【HDU】3729 I'm Telling the Truth 离散+最大流
- HDU A hard puzzle
- DOS批处理命令递归删除给定的文件(夹),兼VC工程清理小工具
- hdu1090 a+b问题2 N组数,N在前 20140722
- cocos2d-x 坐标系