#if 0 /*从标准输入流输入一段整型数,存放在动态开辟的一段内存中,这段内存存放一个数组,
数组的第一位存放元素的个数,后面依次存放其他元素 */
#define N 10
int main()
{
int size =N;
int *p=(int*)malloc((size+1)*sizeof(int));
int count=0,a,i;
while (1==(scanf("%d",&a)))
{
count++;
if (count>=size)
{
size+=N;
p=(int*)realloc(p,(size+1)*sizeof(int));
}
p[count]=a;
}
if (count<size)
p=(int*)realloc(p,(count+1)*sizeof(int));
p[0]=count;
for (i=0;i<=count;++i)
printf("%d ",p[i]);
printf("\n");
free(p);
p=NULL;
return 0;
}
#endif
#if 0
int main()
{
/* char a='a';
char *p=&a;
(*p)++;
printf("%c\n",a);*/
/*char str[20]="asdf";
char *p=str;
str[0]='k';
puts(str);
for (p=str;p<str+strlen(str);p++)
puts(p);*/
//char str[20]="12345";
//str="12345"; str[20]="12345"; error
//strcpy(str,"asdf"); ok
//gets(str);
/* char *p="12345"; p="qwert":
在定义字符串数组的时候,是先声明一个数组str,然后将字符串12345
存放在其开辟的内存空间中去*/
/* 声明一个字符型指针变量p,将p指向字符串常量12345的首地址,也就是说
将12345的1的地址存放到指针变量p中
*/
/*char *p="12345";
p="67890";
puts(p);
p++;
*p='k'; //会出现地址错误的提示,
puts(p);*/
return 0;
}
#endif
#if 0
int main()
{
char *p="12345";
char *q="qwert";
char a[]="123345";
char b[]="qwert";
char *t=NULL;
char c[20];
t=p;
p=q;
q=t;
puts(p);
puts(q);
strcpy(c,a);
strcpy(a,b);
strcpy(b,c);
puts(a);
puts(b);
return 0;
} // 字符数组和字符指针交换内容是采用不同的方式,指针是改变其的指向,
//而数组是借助第三个来交换。
#endif
#if 0
int main()
{
char a[]="1234";
char b[]="1234";
const char c[]="1234";
const char d[]="1234";
char *p1="1234";
char *p2="1234";
const char *p3="1234";
const char *p4="1234";
if (a==b)
printf("a==b\n");
if (c==d)
printf("c==d\n");
if (a==c)
printf("a==c\n");
if (p1==p2)
printf("p1==p2\n");
if (p3==p4)
printf("p3==p4\n");
if (p1==p3)
printf("p1==p3\n");
return 0;
} //还是从指针和数组的定义出发,指针是指向首地址的,而数组是依次开辟的内存空间
//每个地址肯定不同。
#endif
#if 0
int main()
{
char a='a';
char *p=&a;
strcpy(p,"12334456778");
puts(p); //p只是指向了a的地址但是后面并没有内存空间,所以会出现内存错误
return 0;
}
#endif
#if 0 //指针数组
int main()
{
int a[5]={1,2,3,4,5};
int *p[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};
int i;
for (i=0;i<5;++i)
{
p[i]=&a[i];
}
for (i=0;i<5;++i)
printf("%d ",*p[i]);
printf("\n");
return 0;
}
#endif
#if 0
int main()
{
int a[3][4]={1,2,3,4,5,6,7,8,9,0,9,8};
int *p[3];
int (*q)[4];
int i,j;
//-------数组指针
q=a;
for (q=a;q<a+3;q++)
{
for (i=0;i<4;++i)
printf("%d ",*(*q+i));
printf("\n");
}
//------指针数组
for (i=0;i<3;++i)
p[i]=a[i];
for (i=0;i<3;++i)
{
for (j=0;j<4;++j)
printf("%d ",*(p[i]+j));
printf("\n");
}
return 0;
}
#endif
#if 0
int main()
{
char *p[5]={"123","asfsds","t","456","rtyety"};
char *t=NULL;
int i,j;
for (i=0;i<5;++i)
{
for (j=0;j<5-i-1;++j)
{
if (strcmp(p[j],p[j+1])>0)
{
t=p[j];
p[j]=p[j+1];
p[j+1]=t;
}
}
}
for (i=0;i<5;++i)
puts(p[i]);
return 0;
}
#endif
#if 0
int main()
{
char a[5][20] = {"123","asdfads","t","456","rtyety"};
char *p[5];
char t[20];
int i,j;
for (i=0;i<5;++i)
p[i]=a[i];
for (i=0;i<5;++i)
{
for (j=0;j<5-i-1;++j)
{
if (strcmp(p[j],p[j+1])>0)
{
strcpy(t,p[j]);
strcpy(p[j],p[j+1]);
strcpy(p[j+1],t);
}
}
}
for(i = 0;i<5;i++)
puts(p[i]);
return 0;
}
#endif
#if 0
int main()
{
char *p[5];
int i;
for (i=0;i<5;++i)
{
p[i]=(char*)malloc(20);
gets(p[i]);
}
for (i=0;i<5;++i)
{
puts(p[i]);
free(p[i]);
p[i]=NULL;
}
return 0;
}
#endif
#if 0
int main()
{
int a[5]={1,2,3,4,5};
int *p[5];
int **q; //二级指针
int i;
q=p;
for (i=0;i<5;++i)
p[i]=&a[i];
for (q=p;q<p+5;q++)
printf("%d ",**q);
printf("\n");
return 0;
}
#endif
#if 0
int main()
{
int *p=(int*)malloc(4);
int **q;
*p=5;
q=(int **)malloc(4);//二级指针都是要开辟两次内存空间的,所以一般将其
*q=(int *)malloc(4);//何指针数组结合起来
**q=4;
printf("%d\n",**q);
return 0;
}
#endif
数组的第一位存放元素的个数,后面依次存放其他元素 */
#define N 10
int main()
{
int size =N;
int *p=(int*)malloc((size+1)*sizeof(int));
int count=0,a,i;
while (1==(scanf("%d",&a)))
{
count++;
if (count>=size)
{
size+=N;
p=(int*)realloc(p,(size+1)*sizeof(int));
}
p[count]=a;
}
if (count<size)
p=(int*)realloc(p,(count+1)*sizeof(int));
p[0]=count;
for (i=0;i<=count;++i)
printf("%d ",p[i]);
printf("\n");
free(p);
p=NULL;
return 0;
}
#endif
#if 0
int main()
{
/* char a='a';
char *p=&a;
(*p)++;
printf("%c\n",a);*/
/*char str[20]="asdf";
char *p=str;
str[0]='k';
puts(str);
for (p=str;p<str+strlen(str);p++)
puts(p);*/
//char str[20]="12345";
//str="12345"; str[20]="12345"; error
//strcpy(str,"asdf"); ok
//gets(str);
/* char *p="12345"; p="qwert":
在定义字符串数组的时候,是先声明一个数组str,然后将字符串12345
存放在其开辟的内存空间中去*/
/* 声明一个字符型指针变量p,将p指向字符串常量12345的首地址,也就是说
将12345的1的地址存放到指针变量p中
*/
/*char *p="12345";
p="67890";
puts(p);
p++;
*p='k'; //会出现地址错误的提示,
puts(p);*/
return 0;
}
#endif
#if 0
int main()
{
char *p="12345";
char *q="qwert";
char a[]="123345";
char b[]="qwert";
char *t=NULL;
char c[20];
t=p;
p=q;
q=t;
puts(p);
puts(q);
strcpy(c,a);
strcpy(a,b);
strcpy(b,c);
puts(a);
puts(b);
return 0;
} // 字符数组和字符指针交换内容是采用不同的方式,指针是改变其的指向,
//而数组是借助第三个来交换。
#endif
#if 0
int main()
{
char a[]="1234";
char b[]="1234";
const char c[]="1234";
const char d[]="1234";
char *p1="1234";
char *p2="1234";
const char *p3="1234";
const char *p4="1234";
if (a==b)
printf("a==b\n");
if (c==d)
printf("c==d\n");
if (a==c)
printf("a==c\n");
if (p1==p2)
printf("p1==p2\n");
if (p3==p4)
printf("p3==p4\n");
if (p1==p3)
printf("p1==p3\n");
return 0;
} //还是从指针和数组的定义出发,指针是指向首地址的,而数组是依次开辟的内存空间
//每个地址肯定不同。
#endif
#if 0
int main()
{
char a='a';
char *p=&a;
strcpy(p,"12334456778");
puts(p); //p只是指向了a的地址但是后面并没有内存空间,所以会出现内存错误
return 0;
}
#endif
#if 0 //指针数组
int main()
{
int a[5]={1,2,3,4,5};
int *p[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};
int i;
for (i=0;i<5;++i)
{
p[i]=&a[i];
}
for (i=0;i<5;++i)
printf("%d ",*p[i]);
printf("\n");
return 0;
}
#endif
#if 0
int main()
{
int a[3][4]={1,2,3,4,5,6,7,8,9,0,9,8};
int *p[3];
int (*q)[4];
int i,j;
//-------数组指针
q=a;
for (q=a;q<a+3;q++)
{
for (i=0;i<4;++i)
printf("%d ",*(*q+i));
printf("\n");
}
//------指针数组
for (i=0;i<3;++i)
p[i]=a[i];
for (i=0;i<3;++i)
{
for (j=0;j<4;++j)
printf("%d ",*(p[i]+j));
printf("\n");
}
return 0;
}
#endif
#if 0
int main()
{
char *p[5]={"123","asfsds","t","456","rtyety"};
char *t=NULL;
int i,j;
for (i=0;i<5;++i)
{
for (j=0;j<5-i-1;++j)
{
if (strcmp(p[j],p[j+1])>0)
{
t=p[j];
p[j]=p[j+1];
p[j+1]=t;
}
}
}
for (i=0;i<5;++i)
puts(p[i]);
return 0;
}
#endif
#if 0
int main()
{
char a[5][20] = {"123","asdfads","t","456","rtyety"};
char *p[5];
char t[20];
int i,j;
for (i=0;i<5;++i)
p[i]=a[i];
for (i=0;i<5;++i)
{
for (j=0;j<5-i-1;++j)
{
if (strcmp(p[j],p[j+1])>0)
{
strcpy(t,p[j]);
strcpy(p[j],p[j+1]);
strcpy(p[j+1],t);
}
}
}
for(i = 0;i<5;i++)
puts(p[i]);
return 0;
}
#endif
#if 0
int main()
{
char *p[5];
int i;
for (i=0;i<5;++i)
{
p[i]=(char*)malloc(20);
gets(p[i]);
}
for (i=0;i<5;++i)
{
puts(p[i]);
free(p[i]);
p[i]=NULL;
}
return 0;
}
#endif
#if 0
int main()
{
int a[5]={1,2,3,4,5};
int *p[5];
int **q; //二级指针
int i;
q=p;
for (i=0;i<5;++i)
p[i]=&a[i];
for (q=p;q<p+5;q++)
printf("%d ",**q);
printf("\n");
return 0;
}
#endif
#if 0
int main()
{
int *p=(int*)malloc(4);
int **q;
*p=5;
q=(int **)malloc(4);//二级指针都是要开辟两次内存空间的,所以一般将其
*q=(int *)malloc(4);//何指针数组结合起来
**q=4;
printf("%d\n",**q);
return 0;
}
#endif