#include
int main()
{
int a,*p;
p = &a;
return 0;
}
#include
int main()
{
int a,*p,*q;
p = &a;
q = p;
return 0;
}
#include
int main ()
{
int var_runoob = 10;
/**
指针即地址;
变量的指针即变量的地址;
*/
int *p; // 定义指针变量
p = &var_runoob;
printf("var_runoob 变量的地址: %p\n", p);
//var_runoob 变量的地址: 0x7ffeeaae08d8
k = &n;
*k = n;
return 0;
}
#include
int main()
{
int *p = NULL; // int *p = 0;
/*
说明:
NULL表示空,其值为 0
空指针定义不能引用
*/
int *q;
q = p;
return 0;
}
“&”:取 地址 运算符
“*”:取内容运算符。
int *p; 定义时 * 为指针说明符。
#include
int main()
{
int a = 3,b,*p;
p = &a;
b = *p + a;
printf("%d,%d\n",a,b);
return 0;
}
用于存储指针的地址
*p:针对指针变量
#include
int main()
{
int *p = &a;
int **p; //存储的指针p的地址
int **p = &p;
return 0;
}
#include
int main()
{
int a[] = {12,13,14,2,50,6,7},*p,*q;
p = a; // 相当于 p = &a[0]
q = p + 1; // 相当于 q = &a[i];
return 0;
*p = 12; //这里 *p 的作用是取指针变量 p 的内容
*(p + 2) = a[2]; //相当于取值操作,取 a[2] 的值
q[2] = 2; // 指针指向那个元素,那个元素就是首元素
}
指针自增:---------》 后移
指针自减:---------》左移
#include
int main()
{
int a[] = {5,10,15,20,25},*p = a;
*++p; // 指针右移,10
*--p; // 指针左移,5
++*p; // 11
*p++; // 11
*p; // 15
// 靠近结合
a++; // 不合法,
a+1; // 相当于 &a[1]; 合法
/*
数组名是地址常量,不可进行自增自减运算
指针是变量,可以进行自增自减运算。
*/
return 0;
}
指针比较大小就是所在 位置比较大小
指针相减就是位置相减
指针 不可相减
#include
int main()
{
int a[10],*p = a, *q = a + 3; // *p = &a[0]; *q = &a[3];
p > q; // 0 ,0 > 3
p < q; // 1 ,0 < 3
q - p; // 3 , 3 - 0
q + p; // 指针不可相加
return 0;
}
*(a+1) + 2:第一行 第二列 的 地址;
((a+2)+3):第二行 第三列 的内容;
a[1] + 2:第一行 第二列的 地址;
*(a[2] + 3):第二行 第三列的 内容
*,[] 出现任意一个代表地址;
出现任意 两个代表 内容;
①:a[i] ②:*(a+i)
①:a[i][j]
②:((a+i)+j)
③:(a[i]+j)
④:((a+i))[j]
int (*p)[4]; // p 为 int 类型 数组的指针
int *q[3]; //优先级 () > [] > * 指针数组
q[0]、q[1]、q[2] 均为 int *;
int (*p)(); // 函数指针
int *p(); // 指针函数
函数类型可以是任意型,所以返回值也可以是任意类型。