A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hugin 中级黑马   /  2016-9-25 18:04  /  1158 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一个指针变量所占用的内存空间是固定的。

虽然所有的指针都只占8个字节,但不同类型的变量却占不同的字节数。

结论:"定义什么类型的指针就应该指向什么类型的变量。"


int *   --->  指向int类型变量的指针

char *

double *


//----------------------指针常见的应用场景

1)在被调函数中可以修改主调函数中变量的值

编写一个函数,在这个函数修改主函数中一个变量的值



2)函数返回多个值(看起来)

结合指针  用 一个函数实现 加减乘除

num1  ,num2

一个函数   ---->   主函数中    输出  +-*/ 的结果



//--------------------函数实现两变量交换

int num1 = 10,num2 = 20;

函数中

主函数中打印  num1 :  20,  num2  :  10


//------------------------二级指针
如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针(地址)的指针变量。也称为“二级指针”


int a = 10;

int *p = &a;


&p ---->  指针变量的地址  地址   * &p ---->   p  地址   (&a)  * p  --->  a




int a = 5;

int *p = &a;

int ** p1 = &p;


p---指向a的地址

*p---a的地址对应的值----也就是5

p1--指针变量p的地址  &p

*p1 ---> p   p的地址所对应的内容  ---   a的地址

* *p1  ---->   * a的地址  -->  *p  --> 5


//-----------------------指针数组 : 存储指针的数组
什么是指针数组?
是一个数组!  里面的数组元素都是地址

int a = 10,b = 15,c = 20;

int *pa[3] = {&a,&b,&c};  //指针数组

pa[0]  ---->   &a
pa[1] ---->  &b
pa[2]  ---->  &c

类型说明符 *数组名[数组长度]


//定义了一个指针数组  跟二维数组结合  类型说明符 *数组名[二维数组第一维长度]
int arr[2][3] = {
    1,2,3,
    4,5,6
};


int *pa[2] = {arr[0],arr[1]};


for(int i = 0;i < 2;i++){
   
    for(int j = 0;j<3;j++){
        
        *(pa+j)
        //        pa[j];
    }
}


//-----------------------数组名遍历数组元素
&arr == arr == &arr[0] == arr[0] == &arr[0][0]  --->  数组的首地址 / 意义不同

&arr -->  整个数组的地址     +1(越界)

arr -->  指向数组第1行的地址   &arr[0]

&arr[0]  -->  指向数组第1行的地址

arr[0]  --> 第1行的内容/二维数组的第一个一维数组  指向这个一维数组第一个元素的地址 ==  &arr[0][0]

&arr[0][0]   整个二维数组第1个一维数组里面第一个元素的地址
//-----------------------


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


访问 第1行的第1个元素地址表示:

&a[0][0]  ==  a[0]  == *a


获取第1行的第1个元素值的方式:

a[0][0] == *a[0] = **a


1 个回复

倒序浏览
嗯嗯,好好好
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马