c语言能力有限,第一次写博客,如有错误之处还望海涵,并恳请能指出错误与不足,谢谢!
1、对指针的一个简单解释
/*对于不了解指针的小伙伴,对指针做一个简单解释
指针其实就是指向内存中的一块地址,
例如int *p=&a;就是指针p指向变量a所在的地址,定义指针时用
int*p这样的格式,而以后代码再次使用指针时用p=&a;以后的代码
中*p代表取指针p所指向的地址单元中的数据。*/
#include<stdio.h>
int main(void)
{
int a = 12;
int b = 13;
int* p = &a;
printf("%d\n", *p); //结果为12
p = &b;
//*p=&b; //报错,因为=左侧为int*类型,右侧为int类型,不匹配
//p = a; //报错,因为=左侧为int*类型,右侧为int类型,不匹配
printf("%d\n", *p); //结果为13
printf("%p\n", p); /*结果为000000D565B5F954,
这是指针p所指向的变量a的地址,不同电脑可能运行结果不同,
同一电脑两次运行结果可能也不同,因为地址是随机分配的,%p是传递一个指针值*/
}
2、const在指针中的用法
#include<stdio.h>
int main(void)
{
int a = 12;
int b = 13;
//第一种
//const int* p = &a;
//或者int const*p=&a;
//指向常量的指针,指针的地址可以改,但不能对指针内的数据进行改动,
//因为这时* p 是一个常量或者说是只读,但 指针p 可以改动
//可以在后面这么写,(1) p = &b; (2) a = 13; (3)p++;这三种是合法的 不合法的一种为(1)*p=13;
//第二种
//int* const p = &a;
//常量指针,指针p为常量(只读),此时指针p为常量,所指向的地址不能改动,但指针所指地址数据可以改动
//可以在后面这样写,(1)a=13; (2)*p=13;这两种都是合法的 不合法的两种为(1)p = &b; (2)p++;
//第三种
const int* const p= &a; //指向常量的常指针,并且要初始化,用变量初始化,*p 指针p都是只读的,不可改动
//可以在后面这样写,(1)a=13;这种是合法的,不合法的三种为(1)p = &b; (2)*p = 13; (3)p++;
//a = 13;
//p = &b;
//*p = 13;
//p++;
printf("%d\n", *p);
}