首页 > 编程知识 正文

C语言指针详解,定义指针数组并初始化

时间:2023-05-03 20:42:14 阅读:114514 作者:412

指针表示存储器单元的编号或地址,通过指针可以找到对应的存储器单元。 初始化或分配指针的本质是分配地址或相同类型(或兼容类型)的指针,而不管地址是如何获取的。

1、指针初始化

初始化指针时,“=”的右操作数必须是内存中数据的地址,不能是变量,不能直接使用整数地址值(但此语句指示指针为空)。

初始化指针时常用的方法是:

采用空值或空指针常数。 例如int *p=NULL; 或char *p=2-2; 或浮动* 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 '、22、0*5和(void * ) 0指定给任何类型的指针。 然后,该指针将是空指针,系统将确保空指针不指向任何对象或函数。

ANSI C还定义了表示空指针常量的宏空值。 在大多数c语言实现中,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 ' isbeingusedwithoutbeinginitialized .即使使用未初始化的变量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;

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。