指针的小概念

问题:

1.野指针?

2.char *p;

3.int **t

4.A:int (*p)[3];是什么?

      B:Int *p[3];是什么?

5.指针的字长(字节长度)?

6.指针的运算?

7.指针最多可包含几层间接引用?

8.常量指针和指针常量?

9.指针void:void *p

10.函数指针和指针函数?

解答:

1. 指针可以将数据写入内存中的任意位置,野指针:指向一个错误位置的指针。存放在  堆的数据可能会被破坏,用来处理堆的数据结构也可能会被破坏,甚至操作系统的p  据也可能被修改;所有要int *p = ”NULL”。

2.”p”:是一个字符、变量、并且有内存空间,内部存的是所指数据的地址。                       

“*”:为指针运算符,也称间接引用运算符;程序间接引用一个指针是,实际上是引   用指针所指向的数据。

3.int **p是定义一个二级指针变量p;一级*p的值是二级指针p的地址。

      Int a = 10;

      Int *p;//定义一个int类型的一级指针变量

      Int **t;//定义一个int类型的二级指针变量

  p = &a;//使一级指针p指向变量a的地址

  t = &p;//使二级指针t指向一级指针p的地址

  printf(“%d”, a);//输出10

  printf(“%d”, *p);//输出10

printf(“%d”, **t);//输出10

4.A:p为指向含3个元素的一维整形数组的指针变量(是指针)

      B:定义指针数组p,该数组由三个指向整形数据的指针元素组成(是数组)

5.指针内部的值就是指针所指的地址,所以指针在16位操作系统中位4个字节,32位  操作系统为8个字节,64位操作系统位16个字节。

6.算术运算:

         A:指针 -+ 整数

  B:指针 - 指针:只有当两个指针指向同一个数组中的元素时,才允许从一个指针

减去另一个指针,两个指针相减的结果的类型为ptrdiff_t,是一种有符号的整形类型。减法运算的值是两个指针在内存中的距离(以数组为单位,而不是以字节为单位),因而减法运算结果将除以数组元素的类型的长度。

如果两个指针所指向的不是同一个数组中的元素,那么它们之间相减的结果是未定义的。

  关系运算:

  < <= > >=:指向同一数组

  任意指针间可以执行相等不相等测试,指针要不指向同一地址,要么指向不同地址。

7.至少可以有12

8.常量指针:(const char* p)即指向一个常量的指针,指向的内容是常量,不可以被修  改,放在常量区的,但指针本身(也就是它的值)可以修改,即“*p = b”  是非法的,*pp指向的常量的第一个字符,是个常量,不能被改变的。“p  = &q”是合法的,指针可以指向不同的地址?

  指针常量:(char* const p)即指针本身就是一个常量,不可被修改,但指针指向的内  容可以被修改,一开始定义它指向数组a,“*p = ‘b’”这是可以的,但“p = &b”  是非法的。

9.p指向的对象不属于任何类型;任何时候可以用其他类型的指针来代替void指针;或  者用void指针来代替其他类型指针;并且不需要强制转换;可以把char*类型的指针  传递给需要的void指针的函数。

10.函数指针:即指向这个函数的指针,定义为“数据类型 (*fun)(参数列表);”,()的 优先级比*高,所有*fun加括号,如(void (*fun)(int*,int*);

  指针函数:即返回值是指针的函数,定义为“数据类型 *fun(参数列表);,如“char* fun(int*, int*);,即返回值为char*型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值