ANSI C定义了零指针常量的概念
来源:互联网 发布:怎么查找协议数据单元 编辑:程序博客网 时间:2024/05/17 07:13
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;
- ANSI C定义了零指针常量的概念
- C中的概念 指针常量 常量指针 数组名
- 指针常量与常量指针以及typedef定义的指针
- C语言中指针数组的概念和定义
- 数组指针的概念定义
- C/C++明确定义了顺序点的概念:
- 【C/C++】常量指针、指针常量以及指向常量的指针常量
- 【C/C++】常量指针、指针常量以及指向常量的指针常量
- c语言中为何提出了指针的概念?
- C指针的定义
- C 指针的定义
- 【编程语言】C++----常量指针与指针常量的区别
- C语言:指向常量的指针 和 指针常量
- 【C++】由指针常量和常量指针引发的问题
- C指向常量的指针和指针常量
- C/C++常量指针和指针常量的区别
- 【C/C++语言】指针常量与常量指针的区别
- c++,常量指针和指针常量的区别
- 查看被占用的端口
- android studio 版本号设置问题,为什么老是取不到
- 角色更新
- Smashing The Stack
- CocoaPods安装和使用教程
- ANSI C定义了零指针常量的概念
- Java Web应用下实现定时任务的简便方法
- ResourceBundle与Properties
- POJ 1141 Brackets Sequence(区间DP记录路径)
- android之sharedPreferences保存数据文件详细案例
- ubuntu15.10挂载远程服务器到本地
- 今天在写sql语句的时候,碰到了字段值是null时导致判断跟预期不通问题
- hdoj--2534--Score(gcd)
- 【CF 508D】 Tanya and Password (判欧拉路+输出欧拉路径)