C语言指针

论坛 期权论坛 脚本     
匿名技术用户   2020-12-22 06:10   11   0
c语言指针学习
指针只有两层含义,1:指向地址,2:指针有类型,类型是其指向的内存空间数据的类型,表示从首地址开始取多少字节。

C语言相比于其他高级语言,不仅是运行速度快,而且还能够直接操作硬件,操作硬件就是依靠C语言指针这一强大功能实现的,学会C语言指针,就好像是武林高手打通了任督二脉,能大幅度提升编程能力。

地址是个什么东西:计算机存储的数据都有一个唯一的地址,32位系统就是8位16进制数表示的。比如0x12345678就是计算机的一个地址。一位十六进制代表四位二进制,0x12345678转换成二进制就是0001-0010-0011-0100-0101-0110-0111- 1000而每八位二进制占一个字节。


int *(*p(int))【3】
  1. p与()结合(考虑优先级) p是一个函数
  2. p(int) 函数有一个 整形变量
  3. *p(int) 函数返回值类型为指针
  4. *p(int)【3】 指针指向一个数组
  5. *(*p(int))【3】 数组里的元素都是指针
  6. int *(*p(int))【3】 指针指向的内容是int

从最简单的指针再来理解一下
int i=123
int *p=&i
上面的意思是pint *类型的指针,指向i的地址,指针类型代表从首地址开始取多少个类型字节的数据。

int **ptr2 指向指针的指针,如果int*ptr1=&a,则*ptr1=a,*ptr2=ptr1,**ptr2=a。


下面的两个函数,只有指针操作的swap函数2才能实现两个数的交换,第一个代码的swap函数只是在自己的函数空间里操作!并没有影响到主函数!
void swap(int a,int b)
{
int tmp;
tmp=a;
a=b;
b=tmp;
}
int main (void)
{
int a=10;
int b=20;
printf("a=%d b=%d\n",a,b);
swap(a,b);
printf("a=%d b=%d\n",a,b);
}

#include <stdio.h>
void swap(int *,int *);
void swap(int *p1,int *p2)
{
int tmp;
tmp=*p1;
*p1=*p2;
*p2=tmp;
}
int main(void)
{
int a=10;
int b=20;
printf("a=%d b=%d\n",a,b);
swap(&a,&b);
printf("a=%d b=%d\n",a,b);
}
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP