这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 软件与操作系统 » 【一点一滴学嵌入式Linux】指针!

共8条 1/1 1 跳转至

【一点一滴学嵌入式Linux】指针!

专家
2013-08-14 23:47:22     打赏

指针是C语言的精髓所在,简单的讲解是远远不够的,此块内容需要学者自行深入研读

 

指针和指针变量:

指针是一种数据类型,例如int *

变量是一种载体,存放数据

指针变量,就是存放地址的变量


类型转换

整型

1.字节数较小的类型,可以转换为字节数较大的类型

short s=3;

int a=s;

浮点型

2.精度低的类型,可以向精度高的类型转换

float a=1.0;

double s=a;


整型/浮点型

float sum=3.5;

int a=sum;

相当于强制类型转换

void *

无类型的指针,可以转换为任意其他类型的指针

int a;

void *s;

s=(int *)&a;


字符指针:

char *p=“hello world”;

p是指向字符串的指针变量,它存放的是字符串的首地址

%s:

格式控制符接收首地址,一直打印字符,直到遇到‘\0’换行跳格等结束

printf("%s\n",p);



char *q="nihao,furong";

q=q+5;

*q='c';

以上的操作时非法的,因为字符串是存在于常量区, 常量区是只读的,所以经常出现段错误


q="hello.world!";

此操作时合法的,因为,我们只是改变了指针变量q的指向,没有改变字符串的内容





补充:

进程对内存空间的划分

a.代码段(readonly)

存放二进制代码

b.数据段

全局数据区(static)

初始化的全局变量/静态变量

BSS区

未初始化的全局变量

在程序运行前,会将BSS区清零

动态分配内存

由程序员自己分配,自己释放,但是效率比较低,容易产生内存碎片,但是使用方便

c.栈

存放临时变量/局部变量

由系统自动分配内存,效率较高,但是程序员不能控制

d.文字常量区(readonly)

存放常量/字符串,程序结束后由系统释放

变量的生存周期和作用域

局部变量


1.局部变量定义在函数内部

2.局部变量的作用范围{}

3.未初始化的局部变量的值是不可预期的

4.函数调用的时候分配空间,函数结束,空间被释放


全局变量

1.定义在函数外部

2.全局变量的作用域,存在于当前文件

3.未初始化的全局变量的值为0

4.存在于整个程序运行中

注意:在整个文件的任意位置,对它进行修改,都会对它的值产生影响



常量


动态分配空间

#include


char *p;

p=(char *)malloc(30);


为什么要为指针动态分配空间?

指针在定义出来时是没有指向的,我们为了避免出现野指针的现象,要么给指针找一个指向,再或者

为其动态分配一段地址空间,由程序员手动分配,最后使用完,手动释放

free(p)



const

作用:修饰变量,让其变为一个只读常量

const int a=5;

a=6;//error

int const b=6;

b=7; //error


const char *p

char const *p

等价的:都是指针的指向可以改变,但是指向的内容不可以变


char *const p:指向的内容可以变,但是指向不可以变


const char * const P 指向的内容和指向都不可以变




二维数组:

它是一种网状的数据结构,它的存储方式和一维数组相同


基本的定义方式:

类型 + 数组名+【行数】【列数】

1 2 3 4

4 5 6 8

7 8 9 9

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

定义的时候可以省略行数,但是不能省略列数


地址问题

&a[0][0]

a-----二维数组的数组名,同样表示第0行第0列元素的首地址

&a[0]

*a

------------

*(a[0]+3)

a[1]

a[2]

每行的首地址

 

pointer.rar

 




关键词: 一点一滴     嵌入式     Linux     指针    

高工
2013-08-15 00:12:32     打赏
2楼

前段时间坛子里有童鞋在问define、typedef和普通变量定义这几种方法来定义指针

LZ可否顺道科普一下。


助工
2013-08-25 06:12:38     打赏
3楼
指针是非常重要的

助工
2013-08-26 00:32:33     打赏
4楼
最难的就是指针了,我得好好学习学习

助工
2013-09-05 00:18:06     打赏
5楼
继续学习了,谢谢楼主

菜鸟
2013-11-04 19:18:51     打赏
6楼
不断学习中

专家
2022-08-27 15:55:55     打赏
7楼

学习了解一下


专家
2022-08-27 15:56:16     打赏
8楼

学习了解一下


共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]