首页 > 其他分享 >指针

指针

时间:2023-06-08 22:03:54浏览次数:37  
标签:10 arr int 元素 数组 指针

指针类型决定了指针进行解引用操作的时候,能够访问空间的大小。

指针的类型决定了指针向前或向后走一步有多大(距离)

野指针:

野指针就是指针指向的位置是不可知的(随机的 不正确的 没有明确限制的)

1.指针未初始化

int *p;//局部变量指针未初始化,默认随机值

*p=20;

2.指针越界访问

int arr[10]={0};

int* p=arr;

int i=0;

for(i=0;i<12;i++);

{

  *(p++)=i;//当指针指向范围超出数组arr的范围时,p就是野指针

}

3.指针指向内存的空间释放

int* test()

{

int a=20;//a是局部变量,出了test函数的范围,就会释放

return &a;

}

int main()

{

int* p=test()

*p=20;

return 0;

}

如何规避野指针:

1.指针初始化

2.小心指针越界

3.指针指向空间释放即放置NULL

4.指针使用前检查有效性

指针的运算

1.指针+或-整数

int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

int i = 0;

int sz = sizeof(arr) / sizeof(arr[0]);

int* p = arr;

for (i = 0; i < sz; i++)

{

 printf("%d\n", *(p + i));

}

2.指针-指针

int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

int i = 0;

int sz = sizeof(arr) / sizeof(arr[0]);

int* p = arr;

for (i = 0; i < sz; i++)

{

 printf("%d\n", (p + i)-p);

}

3.指针的关系运算

指针数组是数组,用来存放指针

#include <stdio.h>

int main()

{

int arr1[] = { 1,2,3,4 };

int arr2[] = { 2,3,4,5 };

int arr3[] = { 3,4,5,6 };

int* parr[] = { arr1,arr2,arr3 };

int i = 0;

int j = 0;

for (i = 0; i < 3; i++)

{

 for (j = 0; j < 4; j++)

 {

  printf("%d ", *(parr[i] + j));

 }

 printf("\n");

}

return 0;

}

数组指针,它是指针

int arr[10];------------arr是一个5个元素的整型数组

int* parr1[10];---------parr1是一个数组,数组有10个元素,每个元素类型为int*,parr1是指针数组

int (*parr2)[10];--------parr2是一个指针,该指针指向一个数组,数组有10个元素,每个元素类型为int,parr2是数组指针。

int (*parr3[10])[5];----parr3是一个数组指针,该数组有10个元素,每个元素是一个数组指针,该数组指针指向的数组有5个元素,每个元素是int类型

函数指针---指向函数的指针

&函数名和函数名 都是函数的地址


回调函数

他就是一个通过函数指针调用的函数。

标签:10,arr,int,元素,数组,指针
From: https://blog.51cto.com/u_15839001/6443560

相关文章

  • 智能指针
        今天主要是总结下我刚学习的智能指针,分为四方面进行智能指针的整理。注意:本次使用的编译语言为C++,编译器为VS2013。下面直接开始今天的正题吧为什么要使用智能指针?首先我们先来看一段代码:intmain(){ try{ int*p=newint[10];//动态分配内存失败 throwstd::......
  • 链表和双指针框架
    链表和双指针框架前后指针:方便链表删除快慢指针:获取链表倒数第N个元素快慢指针+前后指针:组合问题快慢指针:相交、判环、起点、长度双索引指针:合并/分割/拼接链表链表处理细节细节1:创建额外的哨兵节点的时机细节2:链表递归顺序细节3:虚拟节点细节4:递归实现双向遍历 前后指针:方便链......
  • C++ this 指针
    第一部分this指针的类型可理解为Box*。此时得到两个地址分别为box1和box2对象的地址。实例:#include<iostream>usingnamespacestd;classBox{public:Box(){;}~Box(){;}Box*get_address()//得到this的地址{......
  • C++ 指向类的指针
    C++指向类的指针一个指向C++类的指针与指向结构的指针类似,访问指向类的指针的成员,需要使用成员访问运算符->,就像访问指向结构的指针一样。与所有的指针一样,您必须在使用指针之前,对指针进行初始化。下面的实例有助于更好地理解指向类的指针的概念:#include<iostream>usin......
  • C++ 引用 vs 指针
     引用很容易与指针混淆,它们之间有三个主要的不同:不存在空引用。引用必须连接到一块合法的内存。一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。引用必须在创建时被初始化。指针可以在任何时间被初始化。https://www.lekaowan......
  • C++11中智能指针的原理、使用、实现
     目录理解智能指针的原理智能指针的使用智能指针的设计和实现1.智能指针的作用       C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的......
  • 关于文件处理中的文件指针调动操作 fseek( )
    #include<stdio.h>fseek(FILE*STREAM,    LONGOFSET,    INTORIGIN);      文件指针/文件流   偏移量            起始位置 FILE*fp;1.将文件指针从文件开头向右移动n个字节,fseek(fp, n, SEEK_SET)  ......
  • 指针与内存管理
    参考文章:《现代C++:一文读懂智能指针》https://zhuanlan.zhihu.com/p/150555165《当我们谈论shared_ptr的线程安全性时,我们在谈论什么》https://zhuanlan.zhihu.com/p/416289479指针指针是C++中一种内置变量类型,存放内存地址//局部变量,存储空间静态分配inta;int*p=&......
  • 指针计算详解
    intmain(){ inta[5]={1,2,3,4,5}; int*ptr=(int*)(&a+1);//&a+1跳过整个数组后的地址数组类型转换后存入*ptr printf("%d\n",*(ptr-1));//ptr-1解引用获得的是a[5]的值 p=(structtest*)0x100000; printf("struct大小=%d\n",sizeof(*p));//结构体大小是24......
  • 指针进阶(上)
    前言本章介绍指针进阶上半部分。1、字符指针2、数组指针3、指针数组4、数组传参和指针传参在讲解指针进阶前我们先复习一下,指针的一些基本概念:(1)指针是一个变量,用来存放地址,这个指针唯一标识一块内存空间。(2)指针的大小(所占的空间的大小)固定是4/8个字节,在32/64位环境下会有......