c语言基础-指针初探
一、指针的概念
指针就是地址
二、指针的定义
指针类型 *指针变量名;
指针类型 *指针变量名 = 赋初值(地址);
什么是指针类型:
指针指向地址的数据类型
指向某个数据类型的变量
例子:
#include <stdio.h>
int main(void)
{
int xyd = 5;
int p=&xyd; // 定义一个指针 * 在指针定义的时候只是标识这个变量是指针,并没有任何运算意义
// 在定义指针变量的同时对指针初始化 & 取地址
return 0;
}
#include <stdio.h>
int main(void)
{
int xyd;
int *p = &xyd;
char *xp = (char *)p; // 指针类型的强制转换
// 指针原本指向为4字节空间
// xp指向同一个空间,寻址一字节
return 0;
}
三、const修饰指针
#include <stdio.h>
int main(void)
{
// const 常变量 常的变量
// 常量:一个固定数值,不占用存储空间
// 变量:一个固定的存储空间,里面的值可以被修改
// 常变量:也是一个固定的存储空间,里面的值不可以被修改 本质还是变量
//int const c = 6; // 常变量必须在定义的时候就初始化
const int c = 6; // 没区别 const在修饰普通变量的时候位置无所谓
int a = 5;
a = 6;
//c = 8; // 常变量的值不能够被修改
getchar();
return 0;
}
#include <stdio.h>
int main(void)
{
// 左值右址不能变(只存在于用指针调用的时候)
// const 在号的 左边 修饰指针变量,指针所指向地址里面的值不能变,指向的地址可变
// const 在号的 右边 修饰指针变量,指针所指向的地址不能变,指针里面的值可以变
int a = 5;
int b = 6;
const int *p = &a;
a = 6; // 可以 锁的只是指针,并不影响变量本身的使用,只是通过指针访问的时候限制
*p = 8; // 不可以
p = &b; // 可以 指向可变
*p = 9; // 不可以 通过指针不能修改变量的值
return 0;
}
#include <stdio.h>
int main(void)
{
// 左值右址不能变(只存在于用指针调用的时候)
// const 在号的 左边 修饰指针变量,指针所指向地址里面的值不能变,指向的地址可变
// const 在号的 右边 修饰指针变量,指针所指向的地址不能变,指针里面的值可以变
int a = 8;
int b = 7;
int *const p = &a;
a = 9; // 可以
*p = 9; // 可以 值可变,地址不可变
p = &b; // 不可以 指针存储的地址不可变
return 0;
}
四、函数指针:
函数名就是函数的首地址
#include <stdio.h>
void fun(void);
int main(void)
{
void (*p)(); // 定义函数指针 这个指针指向一个函数
p = fun;
p(); // 通过函数指针调用函数
getchar();
return 0;
}
void fun(void)
{
printf(“this is a c!!\n”);
}
指针作为函数的返回值:
char* fun(…………)
{
return 地址;
}