你会写出如下这样的程序吗?
遗憾的是,今天之前,我会写出这样完全没搞懂指针和数组的弱智程序。
void f(char**p)
{
;
}
void main()
{
char s[123];
f(&s);
}
{
;
}
void main()
{
char s[123];
f(&s);
}
再看下面的分析:
#include<iostream>
using namespace std;
void main(void)
{
char a[24] = "hello";
printf("a=%x\n",a);
printf("&a=%x\n",&a);
char *p = a;
printf("p=%x\n",p);
printf("&p=%x\n",&p);
}
using namespace std;
void main(void)
{
char a[24] = "hello";
printf("a=%x\n",a);
printf("&a=%x\n",&a);
char *p = a;
printf("p=%x\n",p);
printf("&p=%x\n",&p);
}
输出为:
a=12ff30
&a=12ff30
p=12ff30
&p=12ff2c
Press any key to continue
解释如下:
数组a只关联一片内存区域,即以a开头的区域。数组名a就代表该数组的首地址,所以"a=12ff30 &a=12ff30";
指针关联两片内存区域,一个是指针本身的存储区域,一个是指针指向的存储区域。上例中"&p=12ff2c"为指针本身的地址,"p=12ff30"为指针指向的内存首地址。
我的却还是菜鸟,大牛些勿见笑。