指针数组
Just like:
char* arr [5] ={0};
arr [o] =(char*)1;
arr[1]=(char*)2;
arr[2] =(char*)3;
arr[3]=(char*)4;
arr [4]=(char*)5;
or
char a1=’A’;
char a2=’B’;
char a3=’C’;
char a4=’D’;
char a5=’E’;
char* p1 =&a1;
char* p2 =&a2;
char* p3 =&a3;
char* p4 =&a4;
char* p5 =&a5;
char* arr [5] ={p1, p2, p3, p4, p5};
尽量别把地址和指针放到一起,容易崩溃
内存分布情况:
char arr[] = {'c','h','i','n','a'};
printf('%s\n',arr);// s是给定一个地址,让地址往后打印,直到见到0出现地址,但是不包括0,所以要往后补0
char* p1=”if”;//仅收取第一个字符的地址
char* p2 = 'for';
char* p3 = 'while';
char* p4 = 'switch';
char* keyword[] = {'if','for','while','switch'}; // char* keyword[] = {p1,p2,p3,p4};
结构体指针
Just like
struct Arg
{
int a;
int b;
int c;
}
int main()
{
Arg*** pArg;
pArg = (Arg***)100;
pArg++;//砍*也是四个字节
printf("%d\n",pArg)
} //做运算,要砍*了
答案为104
struct Arg
{
int a;
int b;
int c;
}
int main()
{
Arg* pArg;
pArg = (Arg*)100;
pArg++;//砍掉之后是12个字节
printf("%d\n",pArg)
}
打印:112
小插曲:内存分布
顶层代码区:存放代码
下一层栈区:存放参数和局部变量
下一层全局变量:可读,可写
下一层常量区:可读不可写
举例:
char* x=”dd”;
char y[]=”dd”;
*(x+1)=”s”;//不可执行,因为x指的是地址,是一个常量,不可修改
y[1]=”s”;// y 是给值地址,要多少给多少,所以可以改