005-指针铁律1:指针是一种数据类型
本帖最后由 moc 于 2018-8-3 22:27 编辑1、指针也是一种变量,占用内存空间,专门用于存放内存地址
void main()
{
char *p1 = NULL;
char **p2 = NULL;
char ******p6 = NULL;
printf("p1:%d\n", sizeof(p1)); // x86下:p1: 4;x64下:p1:8
printf("p2:%d\n", sizeof(p2)); // x86下:p2: 4;x64下:p2:8
printf("p6:%d\n", sizeof(p6)); // x86下:p6: 4;x64下:p6:8
system("pause");
}
指针也是一种数据类型,也占据内存空间,x86下占4个字节,x64下占8个字节;
不管是多少级指针都一样。
2、*p —>操作内存
1. 在指针声明时,*即表明要声明的变量为指针变量
2. 在指针使用时,*号表示 操作 指针所指向的内存空间中的值
*p相当于通过地址(p变量的值)找到一块内存;然后操作内存;形象的说,*就像是一把钥匙,p就像是一扇门(地址),用钥匙去打开门去弄门后面的内存空间(变量的值) ; 根据指针变量的值(内存地址),去弄门后面的值,可以拿出(右),也可以放入(左)。
*p放在=号的左边,去修改内存空间的值;
*p放在=号的右边,从内存空间去取出值
int a = 10;
int b = 0;
int*p3 = NULL;//声明时,标明该变量为指针变量
a = 20; //通过变量名(别名)a直接修改内存空间的值
p3 = &a;
*p3 = 30; //通过指针(内存地址)间接修改内存空间的值
b = *p3;
system("pause");
3、指针变量和它指向的内存块是两个不同的概念
*含义1给p赋值p=0x1111; 只会改变指针变量值,不会改变所指的内容;再如:p = p +1; //p++
*含义2给*p赋值*p='a'; 不会改变指针变量的值,只会改变所指的内存块的值
*含义3=左边*p 表示 给内存赋值, =右边*p 表示取值内存块的值 含义不同!
*含义4=左边char *p
*含义5保证所指的内存块能修改 *比如不能修改像NULL所在的内存空间,和一些自己都不知道的地址中写数据。
char *p = "abcdef"-->先在内存空间的常量区,开辟空间存放常量"abcdef",再把该字符串的首地址赋值给指针p。
4、指针是一种数据类型,是指它指向的内存空间的数据类型
含义1:指针步长(p++),根据所致内存空间的数据类型来确定
p++ 含义为 (unsigned char )p+sizeof(a);
结论:指针的步长,根据所指内存空间类型来定。
一直在看,觉得好有用,我正在学《数据结构与算法》(考试要求),虽然看得懂,但底子还得打细一点才行。 Kitty喜欢小鱼干 发表于 2018-9-9 22:23
一直在看,觉得好有用,我正在学《数据结构与算法》(考试要求),虽然看得懂,但底子还得打细一点才行。
我后面也会写关于学习数据结构的帖子的,欢迎交流。 moc 发表于 2018-9-9 22:38
我后面也会写关于学习数据结构的帖子的,欢迎交流。
好的,期待楼主的作品!{:5_105:}
页:
[1]