|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 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);
结论:指针的步长,根据所指内存空间类型来定。
|
|