C语言指针学习

简介: C语言指针学习

一、指针概念


1、指针:内存区的每个字节都有一个编号,这个编号就是内存地址,也就是我们说的指针


2、指针变量:指针变量是存放地址的变量


3、指针也是一种数据类型


int * p;p是变量,int*是数据类型


4、万能指针:void *  可以指向任意类型指针


5、指针步长:void *步长无法确定,所以需要转换,int *步长为4,char *步长为1


6、const:修饰指针,表示该指针是只读状态,不能修改



二、实例应用


#include <stdio.h>
int * p;
int a = 11;
int main() {
       p = &a;
       printf("a的内存地址:%p\n", p);
       printf("a的值:%d\n", *p);
       *p = 22;  //相当于给a赋值
       printf("a的值:%d\n", *p);
       system("pause");
       return 0;
}

&:取a的内存地址


*:取内存地址的值


0a2653c851af460fa595bd959398a8f1.png


三、野指针和空指针


1、只有定义后的变量,变量地址才是合法的地址


2、直接指定一个地址都是不合法的,这些不合法的地址就是野指针


3、操作野指针会引起各种报错


int *p=0x1234;


4、空指针:int *p=NULL,为了防止野指针的出现



四、指针大小,32位编译器为4,,64位编译器为8


#include <stdio.h>
int main() {
      int a = sizeof(int *);
      int b = sizeof(double*);
      char* p;
      int c = sizeof(p);
      printf("int *的大小为:%d\n", a);
      printf("double *的大小为:%d\n", b);
      printf("char *的大小为:%d\n", c);
   
      system("pause");
      return 0;
}


0a2653c851af460fa595bd959398a8f1.png


五、多级指针


int a=1;
int *p=&a; //p存放着a地址
int **q=&p;//q存放着p的地址
int ***r=&q;//r存放着q的地址
*p=*(p+0)=p[0]


六、指针函数


int *fun(); 返回值是指针类型,返回的是全局变量的地址,如果返回局部变量地址会报错,函数执行完,局部变量会释放


#include <stdio.h>
int a;
int* fun()
{
       return &a;
}
int main() {
       int* p = NULL;
       p = fun();
       *p = 1;
       printf("a=%d\n", *p);
       system("pause");
       return 0;
}


运行结果:a=1

目录
相关文章
|
3天前
|
存储 C语言
C语言 — 指针进阶篇(下)
C语言 — 指针进阶篇(下)
3 0
|
3天前
|
存储 C语言 C++
C语言 — 指针进阶篇(上)
C语言 — 指针进阶篇(上)
5 0
|
10天前
|
存储 C语言
【C语言】深入解开指针(三)2
【C语言】深入解开指针(三)
|
10天前
|
存储 程序员 C语言
【C语言】深入解开指针(二)2
【C语言】深入解开指针(二)
【C语言】深入解开指针(二)2
|
10天前
|
存储 C语言
【C语言】深入解开指针(一)1
【C语言】深入解开指针(一)
|
11天前
|
C语言 索引
基于C语言的函数指针应用-消息命令处理框架
基于C语言的函数指针应用-消息命令处理框架
11 0
|
18天前
|
存储 人工智能 编译器
C语言指针详解
指针运算,指针和数组,二级指针
C语言指针详解
|
18天前
|
存储 C语言
C语言第二十四弹---指针(八)
C语言第二十四弹---指针(八)
|
1月前
|
C语言
C语言---指针进阶
C语言---指针进阶
18 0
|
4月前
|
C语言
C语言指针进阶(下)
C语言指针进阶(下)
41 1