Android NDK基础2:C_指针类型_空指针_多级指针_指针运算

指针类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <stdlib.h>

//1.指针为什么要有类型?
//指针有类型,地址没有类型
//地址只是开始的位置,类型读取到什么位置结束
void main() {
int i = 100;
//int 类型的指针
int *p = &i;
double j = 78.9;
//赋值为double类型变量的地址
p = &j;
printf("double size:%d\n", sizeof(double));
printf("%#x, %lf\n", p, *p); //想通过4字节读取8字节变量的值,是不行的

getchar();
}

空指针

1
2
3
4
5
6
7
8
9
10
11
12
13
//2.NULL空指针
void main() {
int i = 9;
int *p = NULL;
//p = &i;

//空指针的默认值为0
printf("%#x\n", p);
//访问内存地址0x000000操作系统不允许
//p = 100; //操作系统不允许访问
printf("%d\n", *p);
getchar();
}

多级指针

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//3.多级指针(二级指针)
//指针保存的是变量的地址,保存的这个变量还可以是一个指针变量
//动态内存分配给二维数组
void main() {
int a = 50;
//p1上保存的a的地址
int* p1 = &a;

//p2上保存的p1的地址
int** p2 = &p1;

//int*** p3 = &p2;

printf("p1:%#x, p2:%#x\n", p1, p2);

**p2 = 100;
printf("%d\n",a);

getchar();
}

指针运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//4.指针的运算
//指针的运算,一般在数组遍历时才有意义,基于数组在内存中线性排列的方式
void main() {
//数组在内存中连续存储
int ids[] = { 78, 90, 23, 65, 19 };
//数组变量名:ids就是数组的首地址
//ids、&ids、&ids[0]都是数组的首地址
printf("%#x\n", ids);
printf("%#x\n", &ids);
printf("%#x\n", &ids[0]);
//指针变量
int *p = ids;
printf("%d\n", *p);
//指针的加法
p++; //p++向前移动sizeof(数据类型)个字节
printf("p的值:%#x\n", p); //p的值加了4
//p--;
printf("%d\n", *p);
getchar();
}

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2020 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :