指针是一个指向内存中某个位置的地址。可以动态分配内存。
引用与指针的区别?
引用其实就是别名,它用于定义一个变量来共享另一个变量的内存空间。
指针指向另一个内存空间的变量,可以通过它来索引另一个内存空间的内容,而指针本身也有自己的内存空间。
指针是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,即其所指向的地址可以被改变,其指向的地址中所存放的数据也可以被改变。
引用则只是一个别名而已,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变。
指针可以被重新赋值以指向另个不同的对象,但是引用则总是指向在初始化时被指定的对象,以后不能改变,但是指定的对象其内容可以改变。
如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么应该使用引用。
指针与数组是否表示同一概念?
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
}
#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;
}
void *gp;
gp=&n;
p=(int *)gp;
printf("%d\n",*p); //3
return 0;