开发者学堂课程【你的第一门 C 语言课:常量和指针】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/444/detail/5476
常量和指针
内容介绍:
一、常量
二、指向常量的指针
三、常量指针
四、指向“指向常量的常量指针”的指针
一、常量
- 常量应该是这样:
520,‘a’,3.14
- 或者这样:
#define PRICE 520
#define A
‘
a’
#define PI 3.14
- 还可以使用 const 关键字修饰:
- const int price = 520;
-const char a=’a’;
-const float pi = 3.14;
- 举例
#include
int main()
{
const float pi =3.14;
printf(
“
%f\n
”
,pi)
pi=3.1415;
return 0;
}
运行:gcc test1.c ss ./a.out
结果报错:
test1. C In function main
test.c:9 error:assignment of read-only variable
pi
- 举例
#include
int main()
{
const float pi =3.14;
printf(
“
%f\n
”
,pi)
//pi=3.1415;
return 0;
}
运行:gcc test1.c ss ./a.out
结果:
3.140000
- void 指针我们把它称之为通用指针,就是可以指向任意类型的数据。也就
说,任何类型的指针都可以赋值给 void 指针。
#include
int main( )
{
int num = 1024;
int *pi = &num ;
char *ps = "FishC" ;
void * pv;
pv = pi;
printf("pi:%p, pv:%p\n" ,pi, pv);
printf("pv:%d\n",*(int *)pv);
ps = (char *)pv;
pv = ps;
printf("ps:%p,pv:%p\n" ,ps, pv) ;
printf("*pv:%s\n",(char *) pv) ;
return 0
;
二、指向常量的指针
- 指针可以修改为指向不同的常量
- 指针可以修改为指向不同的变量
- 可以通过解引用来读取指针指向的数据
- 不可以通过解引用修改指针指向的数据
举例:
#include
int main()
{
Int num=520;
const int chum =880 ;
const int *pc = &cnum ;
printf("cnum:
%
d,&cnum: %p\n", cnum, &cnum) ;
printf("*pc: %d, pc: %p\n
,
*pc, pc);
pc=#
printf("num: %d, &num: %p\n ”num, &num) ;
printf("*pc: %d,pc: %p\n", *pc, pc);
num = 1024 ;
return 0 ;
}
运行:gcc test2.c ss ./a.out
结果结果:
cnum: 880, &cnum: 0xbf d030a4
*pc: 880, pc: 0xbfd030a4
num: 520, &num: 0xbfd030a8
*pc: 520,pc: 0xbfd030a8
[fishc@Locathost sle27]$ vi test2.c
[ fishc@LocaLhost s1e27]$ gcc test2.c && ./a. out
cnum: 880, &cnum: 0xbfe71c14
pc: 880 pc: 0xbfe71c14
num: 520, &num: 0xbfe71c18
*pc: 520, pc: 0xbfe71c18
*pc: 1024, pc: pxbfe71c18
三、常量指针
- 指向非常量的常量指针
- 指针自身不可以被修改
- 指针指向的值可以被修改
- 指向常量的常量指针
- 指针自身不可以被修改
- 指针指向的值也不可以被修改
- 举例
#incLude
.
h>
int main( )
{
int num =520 ;
const int cnum = 880 ;
const int *
const p = &num ;
*p
=1024;
printf("*p: %d\n", *p);
return 0;
}
运行:gcc test2.c ss ./a.out
结果:*
p
:1024
四.指向“指向常量的常量指针”的指针
- 举例
#include
int main()
{
int num =520 ;
const int cnum =880;
const int * const p = &num ;
const int * const *pp = &p ;
printf("pp: %p,&p: %p\n" ,pp, &p);
printf("*pp: %p, p: %p, &num: %p\n", *pp, p, &num) ;
printf("**pp: %d, *p: %d, num: %d\n", **pp, *p, num) ;
return 0 ;
}
运行:gcc test4.c ss ./a.out
结果
:
pp:0xbfda9440&p :0xbfda9440
*pp:0xfda9444 ,p: 0xbfda9444, &num :0xbfda9444
**pp:520 ,*p: 520, num: 520