#指针相关介绍定义
指针(Pointer),通常用于数据的间接访问,指针存储的是指向变量的首地址,16位平台就是2位,如果在32位平台,地址就是4个字节,如果实在64位平台,地址就是8个字节(1Byte = 8bit),Int 类型 4Byte char 类型 1Byte 这个是变量在内存中,分配的地址大小,在内存中一个Byte一个地址,即Int类型有4个地址 char类型有一个地址,而指针指向的是,变量类型地址的首地址。
int main()
{
int* pc = NULL;
printf("pc = %d\n", sizeof(pc));
return 0;//指针 pc 大小为8 Byte
}
指针定义类型,指针定义为什么类型,与取地址变量类型一致,即,指针定义类型,应该与取地址变量类型一样(是为了保证,指针进行加减操作时,加减数值正确)。
int main()
{
int int1 = 20;
int *pc = & int1;//这里指针类型为 int*类型,因为a的类型为 int
return 0;
}
指针加一寄存器位置移动大小,应与指针类型一致,即 int 类型 +4 char 类型 +1 ,所以指针类型不能随便定义(int 类型变量在内存中,存储单元为4位,char 类型在内存中存储单元为1位)即指针++与--操作 加 | 减的是指针取地址变量类型的长度。
int main()
{
int a = 10;
char char1 = "1";
int* pc = &a;//这里指针类型为 int*类型,因为a的类型为 int
char* pb = &char1;
printf("pc=%p\n", pc);
printf("pb=%p\n", pb);
printf("pc=%p\n", ++pc);//指针++加的是取地址变量类型长度 这里+4
printf("pb++=%p\n", ++pb);//char类型+1
return 0;
}
指针类型不应该随便定义,在定义指针时,要进行指针初始化,没有进行指针初始化的指针是野指针,这种指针的地址是未知的。为了防止野指针的出现,如果不知道,指针定义为什么类型,该赋值,什么地址,就定义为空指针,因为空指针的地址是已知,的而只定义指针的类型而不定义,指针的取地址范围,这种指针称为野指针,同时地址范围也是未知的。
int main()
{
int* pc = NULL;//这里将指针赋值为空指针
printf("%p\n", pc);//指针内部存储的地址是0x0是确定的
}
当使用指针时可以实现数据的间接访问,也就是通过指针访问取地址变量的值
int main()
{
int a= 10;
int*pc = &a;
printf("%d\n",*pc);
return 0;
}
#使用指针遍历数组
指针的++与--操作经常用在数组,因为在系统内存中,访问数组数组时知道下一个,存储单元存放的内容是什么,如果不知道下一个存贮单元的内容是什么进行指针++操作,那么所得到的内容也是未知的,使用指针++ | --操作访问数组。
int main()
{
char c[3] = {0x01,0x02,0x03};
char* pc = &c;
int i = 0;
for (i = 0; i < 3;i++) {
printf("%p\n", *(pc+i));
}
}
#指针的应用 使用指针传递参数
在使用函数传递数据时,函数内部会生成一个局部变量,这个变量,会将传进来的参数的数据全部进行复制到自己的地址内部,如果这个数据很小,没什么问题,如果数据很多,很大,那么此时,就会影响程序响应进度,当使用指针进行传递数据时,不需要考虑这个,因为指针内部存贮的地址,直接指向的就是需要传递的数据本身,没有复制的这个过程,如果使用指针就会快上很多,具体代码如下所示
void Value_return(char b[]);
void Value_return1(char param[]);
int main()
{
char c[3] = {0x01,0x02,0x03};
Value_return(c);
Value_return1(c);
return 0;
}
void Value_return(char *pc) {
int i = 0;
for (i = 0; i < 3; i++) {
printf("%p\n", *(pc + i));
}
}
void Value_return1(char param[]) {
int i = 0;
for (i = 0; i < 3; i++) {
printf("%p\n", param[i]);
}
}
当使用Value_return1()这个函数进行返回参数值的时候,会生成局部变量 char param这个局部变量内部会全部复制,char c 里面的内容,如前文所讲,如果进行大批量数据进行传输时,程序执行速度回变慢,当调用Value_return()的时候,使用指针,指针内部存放的是,数组参数的首地址,然后进行++遍历,这个过程是没有进行复制操作的。过程相对于第一个函数是很快的。
标签:int,练习,C语言,char,pc,地址,类型,指针 From: https://blog.csdn.net/weixin_62292999/article/details/139561257