铁律1:指针是一种数据类型
1) 指针也是一种变量,占有内存空间,用来保存内存地址
测试指针变量占有内存空间大小
2)*p操作内存
在指针声明时,*号表示所声明的变量为指针
在指针使用时,*号表示 操作 指针所指向的内存空间中的值
*p相当于通过地址(p变量的值)找到一块内存;然后操作内存
*p放在等号的左边赋值(给内存赋值)
*p放在等号的右边取值(从内存获取值)
3)指针变量和它指向的内存块是两个不同的概念
//含义1给p赋值p=0x1111;只会改变指针变量值,不会改变所指的内容;p = p +1; //p++
//含义2给*p赋值*p='a';不会改变指针变量的值,只会改变所指的内存块的值
//含义3 =左边*p表示 给内存赋值,=右边*p表示取值 含义不同切结!
//含义4 =左边char *p
//含义5保证所指的内存块能修改
4)指针是一种数据类型,是指它指向的内存空间的数据类型
含义1:指针步长(p++),根据所致内存空间的数据类型来确定
p++=è(unsigned char )p+sizeof(a);
结论:指针的步长,根据所指内存空间类型来定。
*号像一把钥匙,*p, p就像一扇门,通过钥匙打开门后面的内存空间
void main()
{
char buf1[100] = {0}; //存放在临时区,栈区,buf1的值为0
char buf2[100] = {0}; //存放在临时区,栈区,buf2的值为0
char *p1 = buf1; //指针p1指向buf1的内存空间
char *p2 = buf2; //指针p2指向buf2的内存空间
strcpy(buf1, "abcdefg");
while(*p1 != '\0') //这个循环就是判断是否是已'\0‘为结尾的,
{
*p2 = *p1; //如果不是,就拿到p1所拿到的值赋值给p2 , 比如字符串"abcdefg" ,拿到第一个a,把a这个值,赋值给p2
p1++; //指针后移一位。
p2 ++; //指针后移一位。
}
p1++,p2++,这里指针后移一位,不是内存所在地址,后移一位,而是改变指针内存变量的值,向后移动一位。p是变量,*代表指针。
如果不对,欢迎指教
printf("buf2:%s", buf2);
system("pause");