学如逆水行舟不仅则退
今天老板写了一篇文章让我帮忙校验一下,于是我就有了下面的代码标题的感悟
#include <stdio.h>
typedef unsigned char uchar;
int main(void)
{
int i, *ip = &i;
printf("i的地址空间是:%p\n",ip);
//uchar *niu; //niu指向的地址空间存放的数据是uchar类型的数据
//uchar **sp; sp是一个指针变量 uchar ** 是sp指针的类型
// uchar * 含义是指针指向的地址空间内所存储的类型是 uchr *这种类型
// 显然uchar *这也是一个指针变量该变量指向的地址空间所存//储的类型是 uchar 类型
uchar a,b,c,d,e,f,g,h,x,y,z;
uchar niu[12] = {3,1,7,5,9,19,8,2,5,6,6,8};
uchar *sp;
sp = niu;//数组名也是指针类型 也是一个地址
a = *sp; //此时*含义代表取sp指针存放的地址空间的数据内容是多少
printf("a = *sp 结果:a = %d\n",a) ;//a = *sp 结果:a = 3
b = *sp + 1;
printf("b = *sp + 1 结果:b = %d\n",b);//b = *sp + 1 结果:b = 4
c = *sp++;
printf("c = *sp++ 结果:c = %d\n",c) ;//c = *sp++ 结果:c = 3
d = *sp;//指针经过上次就算偏移地址加1 指向3变成指向1
printf("d = *sp 结果是:d = %d\n",d);//d = *sp 结果是:d = 1
e = *(sp+1);//指针指向再加1后指向内容是 7 取内容是7
printf("e = (*sp+1) 结果是:e = %d\n",e);//e = (*sp+1) 结果是:e = 7
f = *sp;//指针不加1指向的内容就是1
printf("f = *sp 结果是:f = %d\n",f);//f = *sp 结果是:f = 1
x = sizeof(niu) ;//数组niu所占的字节数目
printf("x = sizeof(niu) 结果是:x = %d\n",x);//x = sizeof(niu) 结果是:x = 12
y = sizeof(sp);//指针变量所占用的内存空间 跟编译器有关
printf("y = sizeof(sp) 结果是:y = %d\n",y);//y = sizeof(sp) 结果是:y = 8
z = sizeof(*sp);//*sp的数据类型指向是 uchar uchar所占的字节宽度
printf("z = sizeof(*sp) 结果是:z = %d\n",z);//z = sizeof(*sp) 结果是:z = 1
g = *(sp+sizeof(*sp)) ; //等价于*(sp+ 1) 指向数组元素 1 后面的元素 这里是元素 7
printf("g = *(sp+sizeof(*sp)) 结果是:g = %d\n",g);//g = *(sp+sizeof(*sp)) 结果是:g = 7
h = *(sp+sizeof(sp)) ;
printf("h = *(sp+sizeof(sp)) 结果是:h = %d\n",h);//h = *(sp+sizeof(sp)) 结果是:h = 6
return 0;
}
运行结果
#include <stdio.h>
typedef unsigned char uchar;
int main(void)
{
uchar a,b,c,d,x;
uchar niu[]="edu118";
printf("niu的地址是:%p\n",niu);
uchar nsd[6]="edu118";
printf("nsd的地址是:%p\n",nsd);
uchar *sp,*ss;
sp=niu;
printf("sp的地址是: %p\n",sp);
ss=nsd;
printf("ss的地址是: %p\n",ss);
a = *sp; //a被赋值为字符'e'
printf("a = *sp 的结果是: %c\n",a);
b = sp[0]; //b被赋值为字符'e'
printf("b = sp[0] 的结果是: %c\n",b);
c = sp[5]; //c被赋值为字符'8'
printf("c = sp[5] 的结果是: %c\n",c);
d = *(sp+6); //d被赋值为'\0'
printf("d = *(sp+6) 的结果是:十进制:%d 字符:%c\n",d,d);
x = *(ss+7);
printf("x = *(ss+7) 的结果是:%d\n",x) ;
return 0;
}
知识还是要用起来,学习还要日积月累