论指针的类型用处
昨天看到有个代码,给了我对malloc开辟空间,和指针自增的进一步了解
(源码)#include<stdio.h> //printf() //(1)头文件信息
#include<stdlib.h> //malloc() //(2)
int main(void) //(3)
{
int count;
int* array;
if((array=(int *)malloc(10*sizeof(int)))==NULL) //(4)分配空间
{
printf("malloc memory unsuccessful");
exit(1);
}
for (count=0;count<10;count++) //(5) 赋值
{
*array=count;
array++;
}
for(count=9;count>=0;count--) //(6)赋值
{
array--;
printf("%4d",*array);
}
printf("\n");
free(array); //(7)释放空间
array=NULL; //(8)将指针置为空,避免不安全访问
exit (0);
}
没错这源码就是我上次转载别人博客里的那个代码,但是我从代码的这段array=(int *)malloc(10*sizeof(int)中 突然认识到指针类型用处,原来一直想有个例子证明我的想法,可是一直没有找到,那么下面我就为大家展示我想的代码,希望能为你有点帮助
演示代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,*q=NULL;
short *array,*p;
array=(short *)malloc(10*sizeof(short));
p=array;
for(i=0;i<10;++i)
{
*p=1;
p++;
}
q=array;
for(i=0;i<5;++i)
{
printf("%d ",*q++);
}
return 0;
}
大家可以看到我把array的类型设置为short类型的,把q指针的类型设置为int类型,然后把赋值都为1,用(int *)q去指向这片内存,运行一下
[root@localhost ~]# gcc 2.c -o 0
2.c: In function ‘main’:
2.c:15: 警告:从不兼容的指针类型赋值
[root@localhost ~]# ./0
65537 65537 65537 65537 65537
[root@localhost ~]#
可以看到会有警告出现,指针类型不兼容,
可以看结果都为65537,和我们想的一样,存储是每两个字节为1,但是读取时读取四个字节,换成二进制位
00000000 00000001 00000000 00000001
这样指针读取的和我们想的就一样了。
大家可以尝试下,如果有好的建议,或意见请发邮件,谢谢大神门的指导。xy_ny_yjs@163.com
昨天看到有个代码,给了我对malloc开辟空间,和指针自增的进一步了解
(源码)#include<stdio.h> //printf() //(1)头文件信息
#include<stdlib.h> //malloc() //(2)
int main(void) //(3)
{
int count;
int* array;
if((array=(int *)malloc(10*sizeof(int)))==NULL) //(4)分配空间
{
printf("malloc memory unsuccessful");
exit(1);
}
for (count=0;count<10;count++) //(5) 赋值
{
*array=count;
array++;
}
for(count=9;count>=0;count--) //(6)赋值
{
array--;
printf("%4d",*array);
}
printf("\n");
free(array); //(7)释放空间
array=NULL; //(8)将指针置为空,避免不安全访问
exit (0);
}
没错这源码就是我上次转载别人博客里的那个代码,但是我从代码的这段array=(int *)malloc(10*sizeof(int)中 突然认识到指针类型用处,原来一直想有个例子证明我的想法,可是一直没有找到,那么下面我就为大家展示我想的代码,希望能为你有点帮助
演示代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,*q=NULL;
short *array,*p;
array=(short *)malloc(10*sizeof(short));
p=array;
for(i=0;i<10;++i)
{
*p=1;
p++;
}
q=array;
for(i=0;i<5;++i)
{
printf("%d ",*q++);
}
return 0;
}
大家可以看到我把array的类型设置为short类型的,把q指针的类型设置为int类型,然后把赋值都为1,用(int *)q去指向这片内存,运行一下
[root@localhost ~]# gcc 2.c -o 0
2.c: In function ‘main’:
2.c:15: 警告:从不兼容的指针类型赋值
[root@localhost ~]# ./0
65537 65537 65537 65537 65537
[root@localhost ~]#
可以看到会有警告出现,指针类型不兼容,
可以看结果都为65537,和我们想的一样,存储是每两个字节为1,但是读取时读取四个字节,换成二进制位
00000000 00000001 00000000 00000001
这样指针读取的和我们想的就一样了。
大家可以尝试下,如果有好的建议,或意见请发邮件,谢谢大神门的指导。xy_ny_yjs@163.com