C/C++ 指针

 

一:指针

(1)指针的概念:程序的变量和常量都存储在一个地址数值中,内存地址就表示变量或者常量在内存中的存储位置。
指针就是存储内存地址的变量。

例如:int p = 0; int *q = &p;

(2)指针操作数组

int a[]={1,2,3,4};
int *p = &a[0]; => *p = a; p代表数组a[0]首地址

int p1 = &a[2];
int diff = p1-p; //计算的是地址距离 =2 ;而不是字节数

double beans[5][5];
double pbeans = *beans[0][0];

double *pbeans = beans[0] //等于首位的地址 数组他是顺序存储的

(3) const对象指针和const的区别

const 指针 和 指向 const对象的指针的区别:
指向 const对象的指针 :指针指向const对象的地址,我们可以使用指针来修改里面的数值,地址本身是不能修改的。

const double *cptr; //cptr 指向的是一个double类型的数值, cptr地址数值是可以改变的

cptr 本身不是const,const 只是限定了 cptr必须指向double类型的对象,但是double类型里面数值是不能更改的。

const指针的数值不能修改但是可以修改指向对象的数值,指向const变量的指针不能修改const变量的数值但是可以修改本身的数值

const char * pc = "abcd” //表示pc指针指向的是一个字符串常量,所以不能改变常量的数值
char * const pc = "abcd” //表示 pc是一个常量地址数值,指向的是’abcd”的地址不能改变这个地址数值但是可以改变字符串的数值。

(4)数组指针和指针数组的区别

数组指针就是普通的数组
例如: int a[2] = {1,2};

指针数组,就是数组里存放的数据是指针类型:

char *charset[] = {"aaaaa","bbbb","cccc"};

#include<iostream>
using namespace std;
int main(void)
{
const char* pc = "abcd";
char* const pb = "aaccdd";

pc = "FGCD"; // 可以修改地址数值,但是不能修改字符串常量的数值

cout<<pc[0]<<endl;

pb[0] = 'A'; // 段错误
cout<<pb[0]<<endl;
return 0;
}

 

(5) 函数指针
函数指针:指向函数的指针,函数存放也是需要在内存中存放的,函数也是有地址数值的。
函数指针也指向某个特定的类型,函数类型尤其返回类型和形参决定的,与函数名称无关。

函数指针的示例代码如下:

int (*f)( int x )
double (*ptr)(double x)

//声明一个函数
int fun( int x )
//声明一个函数指针;
int (*f)(int x)

f = fun; // fun 函数的首地址赋值给函数指针

// 定义函数指针
int (*p)();

p = f //赋值

(*p)(a,b); //调用函数指针

指针函数和函数指针的区别:

指针函数:返回类型是指针类型的函数,本质是函数。
函数指针:函数指针是指针,一个指向函数的指针。

(6) this指针

this指针是一个隐含的指针,表示当前对象的数值。

void Date::SetMonth( int m )
{
month = m;
this->month = m ; // this指针

}

原文链接: https://www.cnblogs.com/love-life-insist/p/12802874.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C/C++ 指针

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/345147

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午3:04
下一篇 2023年3月2日 上午3:04

相关推荐