c语言--变量指针和指向变量的指针---部分知识点总结
程序员文章站
2022-07-12 15:37:11
...
-
不能将一个整数直接赋给指针变量作为地址
-
改变函数形参的值,不会改变对应实参的值
-
//正确写法 int n,*p=NULL; p=&n; scanf("%d",p); printf("%d\n",*p);
-
“&”:取地址运算 ; “*”:指针运算符,是定义指针变量的说明符
-
“%le”意思是用科学计数法输出的double数据。 其中%l表示双精度数据double,e表示科学计数法,也就是指数形式。
-
p=&k就是把k的地址取出来后赋值给p。. int *p=&k;就是定义一个整型指针,并且给它初始化k的地址
-
*p++;//等价于*p; p++;
-
int* p1 ; int** p2; int*p3;//都是合法的定义指针变量的语句 p=NULL;和p=0;或p='O';等价;
-
指针变量可以通过求地址运算符(&)来获得地址值,可以通过指针变量获得地址值,还可以通过标准函数获得地址值
-
语句p=NULL;执行后,指针p并不是指向地址为0的存储单元,而是具有一个确定的值-"空"。
-
所谓函数类型是指函数返回值的类型。在C语言中允许一个函数的返回值是一个指针(即地址),这种返回指针值的函数称为指针型函数;
-
/*sizeof用来获取类型或数据对象的长度,也即是一个这种数据类型的变量在内存中所占字节 数。#include <stdio.h> main() { char* p1 =0; int* p2=0; double* p3 =0; printf("%d,%d.,%dIn", sizeof(p1), sizeof(p2), sizeof(p3));//值为4,4,4 }
专门用来存放变量地址的变量,称为“指针变量”。所有类型的指针变量都是地址,所占字节数均为4*/ -
#include <stdio.h> main() { int a = 0.*ptr; ptr = &a; *ptr = 3; a =(*ptr)++; printf("%d,%din", a.*ptr);//程序运行后的输出结果是4,4 }
/*程序执行过程为:定义整型变量a=0与指针ptr ,使指针指向变量a。对指针指向的变量进行赋值=3,将指针所指向变量加1,并赋值给a=4,此时指针依然指向变量a,输出a与指针指向的变量值: 4,4,*/
-
#include <stdio.h> int change(int*data) { *data = *data % 2;//注意,此处data指向的数值对1求余会改变实参指褚向的值 return (*data)+ 1;//重新赋给data指向的变量,然后将ta加a指向的变量值与1的和返回 } main() { int data = 12; change(&data); //程序第一次调用change()函数,传入实参data的地址,将data 的值修改为0 (12%2=0),此时输出data的值是0 printf("%d," , data); data = change(&data);//再次调用tange()传入data的地址,将data的值修改为0 (0%2=0),然后将返回值1重新赋给主函数变量data,所以此时输出data的值是1, printf("%d," , data); }//程序运行后的输出结果是 0,1
-
void fun (char *p2, char *p1) { while ((*p2=*p1)!= '\0') { p1++; p2++; } }
//函数的功能是 接收两个字符指针p2、p1,while循环每次将p1指向的字符赋给p2指向的字符,然后判断p2指向的字符是否是空字符'\0',若不是,p1和2顺序后移一位,直到p1和p2指向空字符, 所以fun()函数的功能是将p1指向的字符串赋值到p2指向的内存空间中
-
当指针指向某个变量时,才能向其中写入数据;
-
指针除了指向变量外,还可以赋值为NULL,表示未指向的任何地址,此时不能写入数据,另外指针必须有基类型,只能指向基类型相同的变量
-
指针只能与一个整数进行运算,即移动指针,两个指针不能运算
-
p1 =p2 =(int *)calloc(5,sizeof(int)); //程序定义整型指针变量p1,p2,调用calloc函数分配5个整型长度的内存空间赋给p1,p2,所以p1,p2指向的是同一段内存的首地址
-
若定义void*p;,则p可以保存任何内存地址;
-
void*为无类型指针,使用时,可以强制转换为任意的指针类型,
上一篇: typescript 类型断言
下一篇: TypeScript学习——类型断言