首页 > 其他分享 >指针

指针

时间:2023-09-17 16:26:53浏览次数:30  
标签:指向 int 地址 数组名 数组 指针

指针

指针,存放的是地址,指向地址上的值
一般的,指针的用处是 1、实现动态数组 2、实现链表等数据结构




指针定义


指针类型 * 指针变量
如:

int a;
int *p; //注意:定义指针时的*属于声明,并不是取值符
p = &a; //&为取地址符,p存放a的地址
所以 *p 等价于 a; //*为取值符



指针类型


数组指针

指向数组的指针,存放数组的地址

注意:数组名是首地址,&数组名才是数组地址


指向数组的类型 (*指针变量)[数组中元素个数]

如:

int a[5] = { 1, 2, 3, 4, 5 };
int (*p)[5] = &a;
for (int i = 0; i < 5; i++) {
	cout << (*p)[i] << " ";
}
输出结果:1 2 3 4 5

函数指针

指向函数的指针,存放函数的地址

注意:函数名就是函数地址


指向函数的类型 (*指针变量)(函数的参数列表

如:

int max(int x, int y) {
	return x > y ? x : y;
}
int main() {
	int (*p)(int, int) = max;
	cout << (*p)(3, 5);    //函数指针的调用,*p即运用取值找到该函数
	return 0;
}	
输出结果:5



指针操作


int *p;
p++;   //指针p指向下一个
p--;     //指针p指向上一个
	
int (*p)[5]= &arr;
cout << *(p+1);  //指向地址(下标)为1的元素,即arr[1]



动态数组

极其节省空间,动态分配数组空间


动态数组的使用有两种方式:1、指针(如*(p+1)) 2、数组下标(如a[1])

指针可以当作数组名,如一级指针p可以当一维数组名,二级指针pp可以当二维数组名


动态一维数组

int main() {
	int n;
	cin >> n;
	int *p = new int[n];     //此处是将p当作数组名看待,申请一个int型大小为n的空间存放int型的指针p
	for (int i = 1; i <= n; i++) {
		cin >> *(p+i);
    }
	for (int i = 1; i <= n; i++) {
		cout << *(p+i) << " ";
    }
	delete[] p;
	return 0; 
}

输入:5
1 2 3 4 5

输出:1 2 3 4 5


动态二维数组

运用多级指针实现,主要思路就是把二维数组当作多个一维数组来看待。

int r = 5;	//用于表示行数
int c = 5;	//用于表示列数
int **arr = new int*[r];	//开辟一块内存来存放每一行的地址
for (int i = 0; i < row; i++)	//分别为每一行开辟内存
    arr[i] = new int[c];
//这是一个r行c列的动态二维数组。



链表


链表


标签:指向,int,地址,数组名,数组,指针
From: https://www.cnblogs.com/codaaaa/p/17708991.html

相关文章

  • C++智能指针
    智能指针是C++语言中一种方便、安全的内存管理工具。智能指针可以自动管理对象的生命周期,避免手动分配和释放内存时可能出现的内存泄漏和悬挂指针等问题。在C++11标准中,引入了三种智能指针:unique_ptr、shared_ptr和weak_ptr。类型含义备注std::unique_ptr 独占资源......
  • 手撕智能指针shared_ptr
    #include<bits/stdc++.h>usingnamespacestd;classCount{private:intcnt;public:Count():cnt(1){}~Count()=default;voidaddcount(){++cnt;}intgetcount(){returncnt;}intreducecount(){return--cnt;}};t......
  • C++11中的智能指针shared_ptr、weak_ptr源码解析
    https://www.jb51.net/article/224028.htm−目录1、前言2、源码准备3、智能指针概念4、源码解析4.1、shared_ptr解析4.1.1、shared_ptr4.1.2、__shared_ptr4.1.3、__shared_count4.1.4、_Sp_counted_base4.1.5、_Sp_counted_ptr4.1.6、shared_ptr总结4.2、weak......
  • C++11之智能指针(万字长文详解)
    C++11之智能指针为什么需要智能指针#include<iostream>usingnamespacestd;intdiv(){inta,b;cin>>a>>b;if(b==0)throwinvalid_argument("除0错误");returna/b;}voidFunc(){//1、如果p1这......
  • 代码随想录算法训练营第9天| ●28. 实现 strStr() ●459.重复的子字符串 ●字符串总结
    28.找出字符串中第一个匹配项的下标mydemo--(mythought)--(falied)classSolution{public:intstrStr(stringhaystack,stringneedle){for(inti=0;i<haystack.size();i++){if(haystack[i]!=needle[0])continue;......
  • 复杂指针解读typedef double(* (* (*p3)() )[10] )()
    1#include<stdio.h>2/*“右左法则”:*/3//*p3指针4//(*p3)()函数指针函数参数列表为()5//*(*p3)()函数指针函数参数列表为()、返回值类型为指针6//(*(*p3)())[10]数组指针指针为函数指针函数参数列表为()、返回值类型为指针7//double(*(*p3......
  • C++11之智能指针(万字长文详解)
    C++11之智能指针为什么需要智能指针#include<iostream>usingnamespacestd;intdiv(){inta,b;cin>>a>>b;if(b==0)throwinvalid_argument("除0错误");returna/b;}voidFunc(){//1、如果p1这......
  • 什么是指针c语言中
    c语言指针自己的看法;因为c语言是面向过程的一门语言和java有所不同(因为之前我就是学的Java),简单来说指针是什么呢,我们都知道,每个变量都有一个,是内存自动分配,java也一样,而c语言的指针是指向内存的地址,具体代码的实现p=&var就相当于取出var的地址保存到p中 那指针有什么......
  • 138. 复制带随机指针的链表
    给你一个长度为n的链表,每个节点包含一个额外增加的随机指针random,该指针可以指向链表中的任何节点或空节点。构造这个链表的深拷贝。深拷贝应该正好由n个全新节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的next指针和random指针也都应指向复制链表......
  • 转动指针,转动拨盘
    初始效果图(左), 转动指针效果图(中),转动拨盘效果图(右)   代码如下:intcenterX=124;intcenterY=124;privatevoidForm1_Load(objectsender,EventArgse){varbmp=GetPointerImg(Resources.valsalvaThresholdPointer,......