指针,地址,地址变量

由于自己的C语言实在看不下去,决定借用寒假时间,重习C语言重要部分。
指针在其中占有很大的作用,选择重习,不为以后拖后腿。
先学习指针的基础知识。

指针优势:
(1)提高程序的编译效率和执行速度。
(2)通过指针可使用主调函数和被调函数之间共享变量或数据结构,便于实现双向数据通讯。
(3)可以实现动态的存储分配。
(4)便于表示各种数据结构,编写高质量的程序。

指针与地址:
由于在计算机中,内存是以字节为单位的连续存储空间,每一个字节都有编号,编号即为地址。
内存的存储空间连续,so地址连续。一个变量的内存地址称为该变量的指针。

指针变量的定义:
 类型说明有三:
 (1)指针类型说明,即定义变量为一个指针变量;
 (2)指针变量名;
 (3)变量值(指针)所指向的变量的数据类型。
类型说明符  *标识符;
比如说:
  int a,b,c;
  int *p;
  p=&a;
  a=5;
  b=10;
  c=a+b;

指针变量赋值:
但其值是地址,无符号的整型。不能把其整型常量赋值给指针变量。
如"scanf("%d",&a);"  变量a的赋值,将数据存到a的地址中。即在a的指针中,"&"表示取地址,"&a"表示变量a的地址。
Tips:指针变量赋值时,注意类型的匹配。
  int a;
  float b;
  int *x=&a;  //正确
  int *y=&b;  //错误

实例:输入两个数,交换它们的值。
#include<stdio.h>
int main()
{
    int a,b,c;
    int *x,*y;         //定义两个指针变量
    x=&a,y=&b;
    scanf("%d%d",&a,&b);
    c=*x;
    *x=*y;
    *y=c;
    printf("a=%d,b=%d\n",a,b);
    return 0;
 }

指针的运算:
(1)取地址运算符&:求变量的地址
(2)取内容运算符*:表示指针所指的变量
(3)赋值运算
·把变量地址赋予指针变量
·同类型指针变量相互赋值
·把数组,字符串的首地址赋予指针变量
·把函数入口地址赋予指针变量
(4)加减运算
对指向数组,字符串的指针变量可以进行加减运算,如p+n,p-n,p++,p--等。
对指向同一数组的两个指针变量可以相减。对指向其它类型的指针变量作加减运算是无意义的。
(5)关系运算
指向同一数组的两个指针变量之间可以进行大于、小于、 等于比较运算。指针可与0比较,p==0表示p为空指针。
指针可以加上或减去一个整数。指针的这种运算的意义和通常的数值的加减运算的意义是不一样的,以单元为单位。


&和*运算

#include<stdio.h>
int main()
{
    int a=2,*p=&a,*q=&a;
    printf("%d,%d",*p++,*(q++));  //输出a的值
    printf("\n");
    printf("%d.%d",*p++,*(q++));  //输出a的下一地址的值
    printf("\n");
    a=2;
    p=&a;
    q=&a;
    printf("%d,%d",*p++,*(++q));
    return 0;
 }
输出结果为
2,2
6684228,6684228
2,6684228
当p\q的值发生变化,指向另一个不确定的变量时,结果不可预料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值