#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define ENDIANNESS(c) do{union{char str[4];int test;}endian_test={'l','?','?','b'};\
c=(char)endian_test.test;\
}while(0);
void getstr(char **p)
{
*p=(char *)malloc(100);
}
void change(int *str)
{
str[0]=str[1];
}
main()
{
/*
int d;
char c[10];
memset(c,'t',10);
scanf("%d,%s",&d,c);
printf("%s\n",c);
printf("%s",isalnum(c[5])?"alpha":"not alpha");
*/
/*
int a,b,d=25;
a=d/10%9;
b=a&&(-1);
printf("%d,%d\n",a,b);
*/
/*
int p[3]={11,12,13};
int i=0;
int j=0;
while(i++<2)
{
if(p[i]%2)
j+=p[i];
}
printf("%d",j);//13
*/
/*
char a[]="a0\0a\3779\\\0";//\+数字 \x+数字分别表示八进制和十六进制的ascii码 若\后面数字超出\377(十进制的255)范围 编译不通过,并且当\后面的数字大于7时则另算一个字符
printf("%s\n",a);
printf("%d,%d",strlen(a),sizeof(a));//2,9
*/
/*
#define ADD(a,b) a+b
printf("%d\n",ADD(2,2)*2);//6
*/
/*
int a[010];
printf("%d\n",sizeof(a));//32
*/
/*
int *test1,*test2,*test3,*test4;
int a[3][2]={{10,20},{30,40},{50,60}},(*p1)[2],*p2,**p3,(*p4)[3][2];
p1=a;
p2=a;
p3=a;
// p4=&a;
//各种打印50的方法
printf("%d\n",*(*(p1+1)+2));//p1是数组指针,值为数组首地址,
printf("%d\n",p2[4]);//
printf("%d\n",p3[4]);
// printf("%p\n",p4[0][0]);
// printf("%p\n",p4[2][1]);
/*a是数组名,绝对不是一个指针常量(区别于常量指针),等下回分解,没有分配存储单元,在代码段被初始化为立即数
只是一个立即数,看你如何去理解这个立即数了*/
/*arris
char* str=NULL;
getstr(&str);
strcpy(str,"Hello world");
printf("%s",str);
*/
/*arris
int aa[]={1,2,3,4,5,6,7,8,9,10};
int i;
for(i=1;i>0;i--)change(&aa[i]);
printf("%d",aa[0]);
*/
/*arris
enum ENUM{
x1,
y1,
z1=1,
x2,
y2,
z2,
};
enum ENUM ENUMA=x2;
enum ENUM ENUMB=y2;
enum ENUM ENUMC=z1;
enum ENUM ENUMD=y1;
printf("%d,%d,%d,%d",ENUMA,ENUMB,ENUMC,ENUMD);
*/
//大端小端
//char c;
//ENDIANNESS(c);
//printf("%c",c);
int *temp;
int a[2][3][2]={{{1,2},{3,4},{5,6}},{{7,8},{9,10},{11,12}}};
int (*p)[3][2]=a;//p的值就是1所在的地址,p[0]的值还是1所在的地址,p[0][0]的值仍然是1所在的地址的值,p[0][0][0]是1,(到底什么是指向数组的指针呢?可以认为他是指向数组名的立即数的指针,*p就相当于(只是为了记忆)这个数组的数组名,我们知道一个N维数组名作为右值时是可以赋给一个N-1维数组的指针的,所以*p就是一个指向一维数组的指针,类似的**p就是一维数组的数组名(切记不能等同,为了记忆而已),***p就是第一个元素的值,*(p+1)相当于78|910|1112的数组名)
printf("%d\n",*(*(*(p+0)+1)+0));
temp=(int*) ( (int)(*(*(p+0)+1)) + 1 );
printf("%d\n",p[0][0][0]);//1
printf("%d\n",(*(p+1))[1][0]);//9
printf("%x\n",*( (int*) ( (int)(*(*(p+0)+1)) + 1 ) ));//04000000
}