指针

             指针是一个指向内存中某个位置的地址。可以动态分配内存。


             引用与指针的区别?

                   引用其实就是别名,它用于定义一个变量来共享另一个变量的内存空间。

                   指针指向另一个内存空间的变量,可以通过它来索引另一个内存空间的内容,而指针本身也有自己的内存空间。


                 指针是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,即其所指向的地址可以被改变,其指向的地址中所存放的数据也可以被改变。

                 引用则只是一个别名而已,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变。     

                 指针可以被重新赋值以指向另个不同的对象,但是引用则总是指向在初始化时被指定的对象,以后不能改变,但是指定的对象其内容可以改变。

                 如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么应该使用引用。


             指针与数组是否表示同一概念?

                 char a[]="hello world";

                 char *p=a;

                在32位上,sizeof(a)=12字节  sizeof(p)=4字节

             但需要注意,当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针

                void Func(char a[100])

                        { 

                         cout<<sizeof(a);

                        }

                  此时sizeof(a)=sizeof(int)=4,而不是sizeof(int)*100=400;




  指针与数字相加的结果是什么?                  

#include<stdio.h>
int main()
{
  unsigned char *p1;
  unsigned long *p2;


  p1=(unsigned char *)0x801000;//指针变量p1的值就是0x801000
  p2=(unsigned long *)0x810000;//


  printf("%x\n",p1+5);//指针指向的是字符+1×5        801005
  printf("%x\n",p2+5);//指针变量指向的是长整型,加1表示指针向后移动4个字节,那加5代表向后移动5×4=20个字节。0x810014
}





              野指针
              指向不可用内存的指针
           虽然free和delete把指针所指的内存给释放掉了,但它们并没有把指针本身释放掉。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>


int main()
{
char *p=(char *)malloc(100);
strcpy(p,"hello");
free(p);
if(p!=NULL)
{
//printf("Not NULL");
   printf("%c",p);
}
return 0;
 
}
 该段程序问题:虽然对p执行了free操作,p所指的内存被释放掉了,但是p所指的地址仍然不变,在后续的判断p是否为NULL时,根本没有起到防错的作用,所以程序输出仍然为NOT NULL;


空指针:具有空指针值;唯一一个对任何指针类型都合法的指针。

通用指针:可以指向任何类型的变量。用(void *)表示

int n=3,*p;
void *gp;
gp=&n;
p=(int *)gp;
printf("%d\n",*p);    //3
return 0;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值