1 int *p=NULL 和 int *p=0 有些人说是一样的 我不明白啊 我绝对不一样 前者是让这个指针暂时指向内存的首地址(无有效数据) 后者是让内存指向一个0占有的内存(可能是0X...的内存单元) 应该不一样吧?
答:一样的.一般头文件里会有宏定义
#define NULL 0
这样的话,你明白了吧.
每个程序头部0号这个单元都是空的,目的就是为了让空的指针指向这里,一旦引用了这个单元,程序就知道这个指针是空的.
2 有些函数的参数前加& 表示引用 这个引用我实在看不明白 和指针的区别在哪里?
答:看下面函数和说明:
fun1(int &a,int &b)//这里告诉编译器,这个函数是传址的,不是传值的,所以所引用的参数在函数退出后值会改变
{
int t;
t=a;
a=b;
b=t;
}
这种情况下:int aa=8,bb=9;fun1(aa,bb);运行结束后,aa=9,bb=8
fun2(int *a,int *b)//这里没有引用符号,所以是传值.先不要激动,说这明明是把地址传进去了,怎么会是传值呢.
听我慢慢说,如果不信,你可以跟着我做个实验
{
int *t;
t=a;
a=b;
b=t;
}
int aa[3]={1,2,3};int bb[3]={4,5,6};
printf("%ld %d",aa,bb);
fun2(aa,bb);
printf("%d %d",aa,bb);
//怎么样,是不是没有变?
是的,虽然指针传进函数,能对指针所指向的单元进行改动,但对指针本身却是改变不了的.
3 (int *p)[5]={...}是一个定义一个p指针 指向一个一维含5个元素的数组
我有点弄不明白 这个数组要有名字吧 比如int a[5]={...};int *p=a;这个我能理解 (int *p)[5]={...}我有点理解不了了 这个p指针指向这个数组的首地址 但是这个数组没有名字 同学说 这个数组就是p[5] 我还是不怎么懂
答:这是连续的五个指针变量.分别是p[0]到p[4],这里说一说p[0]你就应该可以知道其它四个的含义了.
我们再定义一个int *a.
此时,a和p[0]是同一个级别的指针,它们都应该指向一个sizeof(int)大小的内存空间.
这个数组有名字的,它的名字是p
p指向的是连续五个sizeof(int *)大小的内存空间.每个空间代表一个指针向量.每个向量又可指向别外的int型空间
温馨提示:答案为网友推荐,仅供参考