初入c语言指针
初入指针
获取地址(查找地址&运算符)
如果a是一个变量名,&a就是a这个变量的地址。
int a = 5;
printf("%d,%p",a,&a);
%p用于输出变量的地址
取地址值(索引值,间接运算符*)
又称解引用运算符
ps,星号后跟一个地址或指针名,取出存储在指针指向地址的值
int a = 5;
int *p = &a;
输出 *p=5读取了指针p指向地址的值
指针变量
指针一个值为内存地址的变量,用于储存变量地址,当主调函数不使用return返回值时必须通过地址修改主调函数的值。
ps.主调函数直接通过地址索引修改主函数中变量的值。
int a = 5;
int *p = &a;
指针的声明
指向内存地址存储值的类型 指针变量名
int *p //指向变量类型为int类型的整型
int* *p1 //指向指针变量
int** *p2 //指向指针变量的指针变量
int*为指针变量的储存类型
int** 为指向指针变量的指针变量的储存类型
指针在函数中通信
#include <stdio.h>
int swap(int x, int y)
{
int temp;
temp = x;
x = y;
y = temp;
printf("交换后的数值%d,%d", x, y);
return 0;
}
int main()
{
int x = 1;
int y = 2;
swap(x, y);
printf("交换后的数值%d,%d", x, y);
}
输出结果
很显然swap函数将数字调换但是主函数中x,y并未改变,当函数调用之后函数中声明变量会消失。
如果用指针作为形参传入函数就不一样了
#include <stdio.h>
int swap(int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
return 0;
}
int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
printf("交换后的数值%d,%d\n", x, y);
}
输出结果
原因是因为在函数中并没有生成两个新的整型变量而是指针变量,指针通过索引地址直接修改了主函数中变量所在地址的值。
ps.指针让函数通过自己的局部变量改变整个main函数中的值