指针是一种数据类型, 指针也是一种变量
占有内存空间,用来保存内存地址
测试指针变量占有内存空间大小
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char p = 100;
char * p1 = 100;
char **** p2 = 100;
printf("p:%d,p1:%d,p2:%d\n", sizeof(p),sizeof(p1), sizeof(p2));
system("PAUSE");
return 1;
}/*
是指针变量占用内存的大小(字节数).
在32位机上,所有指针类型变量占用内存字节数都为4
因为32位机就是 4字节
如果在64位机上,指针占用内存大小就是:
8个字节.
*/
(*p)操作内存
在指针声明时,*号表示所声明的变量为指针
在指针使用时,*号表示 操作 指针所指向的内存空间中的值
*p相当于通过地址(p变量的值)找到一块内存;然后操作内存
*p放在等号的左边赋值(给内存赋值)
*p放在等号的右边取值(从内存获取值)
注意: 指针变量和它指向的内存块是两个不同的概念
含义1 给p赋值p=0x1111; 只会改变指针变量值,不会改变所指的内容;p = p +1;
含义2 给*p赋值*p=‘a‘; 不会改变指针变量的值,只会改变所指的内存块的值
含义3 =左边*p 表示 给内存赋值,=右边*p 表示取值 含义不同
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char a = 10;
int *p3 = NULL;
p3 = &a;
*p3 = 20; //间接的修改a的值
//*就像一把钥匙 通过一个地址(&a),去修改a变量的标示的内存空间
{
int c = 0;
c = *p3; //c=20
//*p放在=号左边 写内存
//*p放=号的右边 读内存
printf("c:%d \n", c);
}
{
char *p4 = NULL;
p4 = (char *)malloc(100);
p4 = (char *)malloc(200); //修改的只是指针指向的内存块
}
system("PAUSE");
return 1;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *getStr81()
{
char *tmp = NULL;
tmp = "abcdefgf";
return tmp;
}
void main()
{
char *p = getStr81();
printf("p:%s \n", p);
*(p+2) = 'r'; //经常出现的错误 保证指针所指向的内存空间 可以被修改
//保证指针所指向的内存空间 可以被修改,有时候指针指向常量区(隶属于全局静态区),是不可修改那部分内存空间的
system("pause");
return ;
}
指针是一种数据类型,是指它指向的内存空间的数据类型
指针步长(p++),根据所指内存空间的数据类型来确定
p++=(unsigned char *)p+sizeof(a);
结论:指针的步长,根据所指内存空间类型来定。
注意: 建立指针指向谁,就把把谁的地址赋值给指针。图和代码和二为一。不断的给指针变量赋值,就是不断的改变指针变量(和所指向内存空间没有任何关系)。
指针做函数参数 形参有多级指针的时候,
站在编译器的角度 ,只需要分配4个字节的内存(32bit平台)。所以在分析参数的时候只需要站在编译器的角度考虑即可
当我们使用内存的时候,我们才关心指针所指向的内存 是一维的还是二维的
本文深入解析了指针的概念,包括指针的基本定义、占用内存空间的大小、如何进行指针操作及注意事项等内容,并通过实例演示了指针在实际编程中的应用。

1338

被折叠的 条评论
为什么被折叠?



