C语言基础九——指针(一)
#include<stdio.h>
#include<Windows.h>
#include<string.h>
void exchange1(int x, int y)
{
int t;
t = x;
x = y;
y = t;
}
void exchange2(int *x, int *y)
{
int *t;
t = x;
x = y;
y = t;
}
void exchange3(int *x, int *y)
{
int t;
t = *x;
*x = *y;
*y = t;
}
int *fun(int *x)
{
return x;
}
int main()
{
//什么是指针?——内存地址
//指针常量——每一块内存的地址是固定的是不可改变的,这样的地址称为指针常量
//指针变量——值为地址的变量
int a = 1;
printf("%d\n", &a);//输出a的地址
//指针定义
//类型名 *指针变量名
int *p1;
int *p2 = &a;//定义指针p2,并将a的地址赋值给p2
p1 = &a;//指针赋值
p1 = p2;//指针赋值
*p1 = 10;//将10存储到p1所指向的地址,'*'为解引用符号,*p1可视为一个普通的变量
printf("%d\t%d\n", a, *p1);//上述操作通过p1访问了存放a的值的存储空间并修改了存储的数据,故a的值改变了
*p1++;
printf("%d\n", *p1);//++只作用于p1没有作用于*p1
//指针变量作为函数参数
int a1 = 1, b1 = 2;
exchange1(a1, b1);//功能:交换形参的值。函数参数不是指针类型,对形参的操作不会影响实参
printf("%d\t%d\n", a1, b1);
exchange2(&a1, &b1);//功能:交换传入的地址。a1,b1的值为交换,说明是a1、b1的地址与a1、b1是一个整体
printf("%d\t%d\n", a1, b1);
exchange3(&a1, &b1);//功能:交换传入地址指向的存储空间存储的数据,a1,b1的值发生交换
printf("%d\t%d\n", a1, b1);
//指针函数
printf("%d\n", fun(p1));//指针函数返回值为地址
//指针与数组
int num[5] = { 1, 2, 3, 4 },*p;
p = num;//数组名为数组的首地址,也是第一个元素的地址(数组名是指针常量,p是指针变量)
for (int i = 0; i < 4; i++)
{
printf("%d\t", p[i]);
}//p与num一定程度是等效的
printf("\n");
for (int i = 0; i < 4; i++)
{
printf("%d\t", *(p + i));//指针的偏移:每次偏移一个基类型(指针所属类型)大小
}
printf("\n");
p = &num[2];//将num[2]的地址给p
//字符串与指针
char *ch = "asdcgfg";//指针直接引用字符串
//其余用法与数组相同
system("pause");
return 0;
}

浙公网安备 33010602011771号