常量和指针

简介: 一、常量二、指向常量的指针三、常量指针四、指向“指向常量的常量指针”的指针

常量和指针

 

内容介绍:

一、常量

二、指向常量的指针

三、常量指针

四、指向“指向常量的常量指针”的指针

 

 

一、常量

  • 常量应该是这样: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 <stdio.h>

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 <stdio.h>

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 <stdio.h>

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 <stdio.h>

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=&num;

printf("num: %d &num: %p\n ”num, &num) ;

printf("*pc: %dpc: %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: 520pc: 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 <stdio.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 <stdio.h>

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

相关文章
引用的本质:指针常量
引用的本质:指针常量
162 0
|
安全 程序员 C语言
【C语言】指针的爱恨纠葛:常量指针vs指向常量的指针
在C语言中,“常量指针”和“指向常量的指针”是两个重要的指针概念。它们在控制指针的行为和数据的可修改性方面发挥着关键作用。理解这两个概念有助于编写更安全、有效的代码。本文将深入探讨这两个概念,包括定义、语法、实际应用、复杂示例、最佳实践以及常见问题。
394 7
|
编译器 C++
C/C++杂谈——指针常量、常量指针
C/C++杂谈——指针常量、常量指针
189 0
|
编译器 C语言 C++
深入探究C语言中的常量指针与野指针概念及其应用
深入探究C语言中的常量指针与野指针概念及其应用
174 1
|
人工智能 C++
【重学C++】【指针】轻松理解常量指针和指针常量
【重学C++】【指针】轻松理解常量指针和指针常量
439 0
|
C++
面试题:常量指针和指针常量?
面试题:常量指针和指针常量?
127 0
|
编译器 C++
C++ 中 const 和 constexpr 关键字解析:常量、函数和指针
很多 C++ 的初学者看到 const 这个关键字的第一反应都是一头雾水,主要是因为 const可 以出现在很多的位置,以及后面加入的 constexpr 更是常常感到困惑,今天就为大家一一解释出现它们的含义和以及作用
499 0
|
安全 Java 编译器
C生万物 | 常量指针和指针常量的感性理解
常量指针是指针吗❓指针常量是常量吗❓它们有何区别,本文告诉你👈
156 0
C生万物 | 常量指针和指针常量的感性理解
|
编译器 C语言
指针详细概念知识点及运用,指针与常量,指针的运算,scanf()中的&有什么用?你想知道的,都在这儿~ 1.1.4
f函数里的*p保存了i的地址,在这个函数指向i,此时对*p赋值,也就相当于对i值进行了改变,实现了对外链接,i的值变为了26,就是芥末神奇。此时以*q = 26为例,是可以做的,因为i不是const,i可以赋初值,使 i=26,但因为q是const,所以q++的做法是错误的。表示不能通过p这个指针去修改i这个变量,即*p=26是错误的,不能让 i=26,此时的*p是const。无论指向什么类型,所有指针的大小都是一样的,因为都是地址,但指向不同类型的指针是不能直接相互赋值的。......
指针详细概念知识点及运用,指针与常量,指针的运算,scanf()中的&有什么用?你想知道的,都在这儿~ 1.1.4