指针铁律专题

铁律1:指针是一种数据类型  

1) 指针也是一种变量,占有内存空间,用来保存内存地址

测试指针变量占有内存空间大小

2*p操作内存

在指针声明时,*号表示所声明的变量为指针

在指针使用时,*号表示 操作 指针所指向的内存空间中的值

*p相当于通过地址(p变量的值)找到一块内存;然后操作内存

*p放在等号的左边赋值(给内存赋值)

*p放在等号的右边取值(从内存获取值)

3)指针变量和它指向的内存块是两个不同的概念

//含义1p赋值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");



猜你喜欢

转载自blog.csdn.net/u013988442/article/details/78916194