/*按照偏移值访问函数形参内容实验*/
//二级指针
void Pros(char* a,int b,int e,char et)
{
char **p=&a;
//a==*p
printf("%p %p %p %p \n%p\n",&a,p,a,*p,&b);
printf("%s\n",*p);
p++;
printf("%d\n",*p);
p++;
printf("%d\n",*p);
p++;
printf("%c\n",*p);
return;
}
//一级指针访问
void Test(char* a,int b)
{
char *p=(char*)&a;
//a!=*p;
//printf("%p %p %p %p\n",&a,p,a,*p);
//printf("%p\n",&b);
//得出结果一级指针自加+1 二级指针自按照元素内容大小自加
//printf("%d %p\n",*(++p),p);
//printf("%d %p\n",*(p+8),p+8);
//a=a[0]一个printf函数以'\0'结束
//此时p=&a把元素首地址给了p或者说a只记录一个元素首地址的地址
//同等汇编语句 a:db 'Hello' b:db '16'
//所以 p=&a != p=a ;
/*
char *a="Hello";
char *b=(char*)&a;
printf("%p %p %p %p",&a,b,a,&(a[0]));
*/
//printf("%c %p %p\n",*a,a,&(a[0]));
//printf("%c %p %p\n",*(a+1),a+1,&(a[1]));
printf("%c\n",*(*(char**)p));
//if p=a; *p=a;
p=a;
printf("%s",p);
return;
}
int main()
{
//Pros("Hello",5,66666,'a');
Test("Hello",16);
//指针转换问题
/*
char *a="Hello";//&a变量里面存储着a所指向的变量地址
//char **p=&a;
char *b=(char*)&a;
char **p=&a;
printf("%p %p %p %p\n",&a,b,a,*b);
printf("%p %c\n",&(*a),*(&(*(a+1))));
printf("%p %c\n",a,*a);//此时a->H,*a=H;
printf("%p %c\n",(*p),*(*p));
//p=&a,*p=a所指向的第一个元素的地址还需要一解才能访问正确数据
//所以1级指针需要解2次 所以进行强制转换
printf("%c \n",*(*(char**)b));
//原试解 现在b=&a,*b= &a->a所以如果此时想正确访问H必须在解
*/
return 1;
}
HBR1
HBR1
238***9419@qq.com4年前 (2017-05-01)