清楚的认识指针(C语言)
发布时间:2022-10-31 12:42:22 所属栏目:PHP教程 来源:
导读: 一、指针: 1、指针是什么?
指针就是地址,地址也叫指针
2、指针变量是什么?
用来存放地址(指针)的变量我们称为指针变量
3、指针大小
指针(地址):在32位下占4个字节
指针就是地址,地址也叫指针
2、指针变量是什么?
用来存放地址(指针)的变量我们称为指针变量
3、指针大小
指针(地址):在32位下占4个字节
|
一、指针: 1、指针是什么? 指针就是地址,地址也叫指针 2、指针变量是什么? 用来存放地址(指针)的变量我们称为指针变量 3、指针大小 指针(地址):在32位下占4个字节php指针,在64位下占8个字节 指针变量:在32位下占4个字节,在64位下占8个字节 上代码 #include int main() { char b='v'; int c=20; char* p=&b; //字符型指针变量里面存放的是字符变量的地址 int* a=&c;//整型指针 里面存放的是整型变量的地址 //指针变量的大小 printf("char* p:%d\n",sizeof(p)); printf("int* a:%d\n",sizeof(a)); //指针(地址)的大小 printf("char类型 &b:%d\n",sizeof(&b)); printf("int类型 &c:%d\n",sizeof(&c)); return 0; } 二、数组指针 1、数组指针:是指针,指向数组的指针,可以用指针访问数组的每一个元素 2、指针与数组的访问方式相通: 1>可用指针加下标的方式访问 2>可用指针加步长再进行解引用的方式访问 3、指针与数组没有任何关系 上代码 #include #include int main() { //数组指针 char a[]="shu zu zhi zheng"; char(* p)[]=&a;//里面存放的是整个数组的地址 //p与 *先结合,所以是指针,指向数组的指针 printf("%s\n",*p); //将数组指针解引用操作得到的是整个数组 //以指针的方式打印出整个数组元素; int arr[5]={1,2,3,4,5}; int* q=arr; //让指针指向数组的首元素 int i=0; int s=sizeof(arr)/sizeof(arr[0]);//计算数组的元素个数 for(i=0;i 三、函数指针 1、函数指针:指向函数的指针,指针变量里面存放的是函数的地址 上代码 #include #include void fin() { printf("fin函数调用成功!\n"); } int Max(int a,int b) { printf("Max函数调用成功\n"); int max=a; if(b>max) { max=b; } return max; } int main() { //函数指针,函数的返回值 跟形参类型都不可省略 void (*p)()=fin; //定义了一个函数指针 (*p)(); //以指针的方式调用函数(方法一) p();//以指针的方式调用函数(方法二) int (*q)(int,int)=Max;//函数名代表的是整个函数的地址 //方法一 int max=(*q)(10,30); printf("其最大值为:%d\n",max); //方法二 int s=q(10,30); printf("其最大值为:%d\n",s); return 0; } 四、结构体指针 1、结构体指针:就是指向结构体变量的指针 2、可通过指针的方式访问结构体成员变量(指针->成员变量) 上代码 #include struct ag{ int a; char b; float c; }; int main() { //定义结构体变量并初始化 struct ag s1={10,'b',3.14}; //定义结构体指针并让其指向结构体变量s1; struct ag* p=&s1; //通过指针的方式访问结构体成员变量 printf("%d %c %.2f\n",p->a,p->b,p->c); p->a=20; //通过指针的方式改变成员变量的值 printf("%d %c %.2f\n",p->a,p->b,p->c); struct ag s2; struct ag* q=&s2; scanf("%d %c %f",&q->a,&q->b,&q->c);//给结构体成员变量写入值 printf("%d %c %.2f\n",q->a,q->b,q->c); return 0; } 五、二级指针 1.二级指针:指向一级指针 2、二级指针变量:存放一级指针的地址 上代码 #include #include int main() { int a=10; int b=48; printf("b的内容:%d\n",b); int* p=&a; printf("%d\n",*p); *p=20;//通过指针的方式改变a的内容 printf("%d\n",*p); int** q=&p;//二级指针里面存放的是指针p的地址; printf("%d\n",**q); //二级指针解引用两次就能得到a的内容 **q=30;//通过指针的方式改变a的内容 printf("%d\n",**q); *q=&b;//改变一级指针的内容使其指向b printf("b的内容:%d\n",b); return 0; } (编辑:我爱资讯网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐


