c语言指针总结
第八章: 指针
知识结构:
1)指针的基本概念
2)怎么定义指针
3)指针的运算
1)指针的基本概念
内存:以字节为单位,由若干个字节组成
为了便宜管理,给每个字节编号(十六进制)
每一个字节的编号在整个内存都是唯一
定义变量:在计算机内存中去预定内存
各类变量所预定的空间大小不同
整型:int TC 2字节 VC 4字节
long TC 4字节 VC 4字节
short TC 2字节 VC 2字节
实型:float TC 4字节 VC 4字节
字符型: char TC 1字节 VC 1 字节
变量的地址,指向变量的指针
用来存储变量地址的变量,指针变量
指针变量只能存储地址,类型必须要一致才能存储
scanf("%d",&a);
2)定义指针变量
int a,b;
int *p,*q;
类型名 *指针变量名1,*指针变量名2...
类型名 :该指针变量的基本类型,只能存储对应类型变量的地址
*:指明该变量是一指针类型的变量(只能存储地址)
float *ft1,*ft2;
double *db1,*db2;
指针变量名: 不包括*号
怎么样去访问变量的内容:
1)拿到该变量的地址,直接对该地址进行访问
2)通过指针变量来间接访问存储单元
怎么样给指针变量赋值:
int a,b;
int *p,*q;
获取变量的地址:
可以用取地址运算符 (&),将变量的地址取出
& : 将指定变量的首字节的编号拿到
得到指定变量的地址
p = &a; :将a的地址取出存储到指针变量p中
通过p可以间接访问变量a
p就是指向变量a的指针
q = &b;
注意: 指针变量的类型必须和变量的基类型是一致才能存储
q = 10; /*指针只能存储地址值*/
int a,b,*q,*c,*p;
p = &a;
q = &b;
c = p; /*将p中的内容取出,赋值给指针c,使指针c和指针p同时指向p所指向的变量*/
可以让指针不指向任何存储单元:
int *p;
p = NULL;
P = 0;
P = '\0';
上面三种方式,都可以使指针p没有指向
int a,*p;
int **q;/*指向指针的指针变量*/
p = &a;
q = &p;
指向指针的指针变量:
基本类型 **指针变量名1,**指针变量名2...
只能存储指针变量的地址,指向的是指针
用指针怎么样来访问变量:
*指针变量名;
*: 运算符将指针所指向的变量内容访问出来
int a,*p;
a = 10;
p = &a;
a <=> *p
int a,*p,**q;
a = 10;
p = &a;
q = &p;
a *p **q
& *都是单目运算符
左边必须是一个变量名,不能表达式或常量
左边必须能够代表一个唯一的存储单元地址
错误赋值表达式:
(A+B) = 10
10 = 10
从键盘上输入两个整数,然后输出
*:定义语句中出现时,表示该变量是一个指针变量
执行语句中出现时,代表间接访问指针变量所指向变量的值
#include "stdio.h"
void main()
{
int a,b,*p=&a,*q,*c,d;
q = &b;
c = &d;
*c = *p;
scanf("%d%d",p,q);
printf("a=%d,b=%d\n",*p,*q);
}
10 20
a=10,b=20
Press any key to continue
1)指针变量在定义时就可以给其进行初始化操作
*:定义语句中出现时,表示该变量是一个指针变量
执行语句中出现时,代表间接访问指针变量所指向变量的值
2)凡是出现&a地方,都可以指针p去代替
3)凡出现a的地方,都可以用间接访问指针去代替(*p)
指针: 为操作存储单元提供一种间接的访问方式
直接访问变量名属于直接操作
2.交换a,b两个变量的值(指针来操作)
#include "stdio.h"
void main()
{
int a,b,*p=&a,*q=&b,t;
scanf("%d%d",p,q);
printf("1)a=%d,b=%d\n",*p,*q);
t = *p;
*p = *q;/*将指针变量q所指向变量的值取出来赋值给指针变量p所指向的存储单元中*/
*q = t;
printf("2)a=%d,b=%d\n",*p,*q);
}
10 20
1)a=10,b=20
2)a=20,b=1