美文网首页嵌入式 Linux C ARM C语言C语言&嵌入式
基础C语言知识串串香8☞指针精髓

基础C语言知识串串香8☞指针精髓

作者: Leon_Geo | 来源:发表于2019-03-29 15:39 被阅读2次

三、指针精髓

3.1 printf("%p\n");
其中%p表示输出一个指针,就是指针变量(其存放的那个地址),可以理解为输出一个地址。

3.2 int *p1, p2;
等同于int *p1; int p2;  int *p="Linux",其不能改变*P,因为”linux"是一个常数。

3.3 (代码规范性)在定义指针时,同时赋值为NULL,在用指针时,先判断它是不是NULL。尤其是在malloc申请内存使用,并在使用完进行释放free(p);后一定要让p=NULL;

3.4 C/C++中对NULL的理解

#ifdef _cplusplus //定义这个符号就表示当前是C++环境
#define NULL 0 //在C++中NULL就是0
#else
#define NULL (void*)0 //在C中NULL是强制类型转换为void*的0
#endif

3.5、修饰词:const(修饰变量为常量,应该理解为不应该去变它,当作常量,而并非永远不能改变,当然要看具体运行环境,在gcc中,const就可以采用指针方式修改,但是在在VC6.6++中就不可以修改):其虽然是当作常数,但是仍然存放在数据段中,用指针仍然可以改变值。

第一种:const int p;
第二种:int const p;
第三种:int
const p;
第四种:const int
const p;

3.6、数组int a[2];
其中a是指首元素的首地址,&a是整个数组的收地址(数组指针,其这个指针指向一个数组),他们的值是一样的,但意义不一样,可以参照int a;int *p = &a;来理解。数组和指针天生姻缘在于数组名;

int a[3]; 
int *p = a;

是可以的,但是int p = &a;就会报错,尽管他们的值是一样的,但意义不一样,所以是不允许的,除非强制类型转换。在访问时是a[0],其实编译器会把它变成(a+0)的方式,只是用a[0]看起来更方便,封装了一下而已,实质还是指针。

3.7、siziof()是一个运算符,测试所占内存空间,如果有int a[100];sizeof(a) = 400;
与strlen()要有所区别,他是测字符串实际长度的,不包括‘\0‘,如果给strlen传的参数不是一个字符串,则它会一直去找,直到找到第一个‘\0’,然后再计算其长度。如char a[] = "chen";char *p=a;strlen(p)=4;

3.8、当数组作为一个形参时,其实参是一个数组名(也可以是指针,其本质就是指针),意义是首元素的首地址,则传过去只影响形参的第一个元素。形参数组的地址被实参数组地址所绑定;实参的大小会丢失,所以往往会传一个int num大小进去。

3.9、结构体做为形参时,应尽量用指针/地址方式来传,因为结构体变量有时会占很大,效率很低。

3.10、指针的指针。如果int *p = &u; p存放的是变量u的地址,而&p的意思就是变量p本身的地址。

3.11、当要传参的个数比较多时,我们可以打包成一个结构体,传参的个数越多,其开销就更大.

3.12一个函数作用其实就是输入输出,参数可以作为输入,返回可以作为输出,但是当要返回多个输出时,这时候就不够用了,所以常常返回值用来判断程序又没有出错,而参数就是当作输入输出的,输入时可以加const表示它没必要去修改,而输出都是指针,因为要改变它的值,只能采用地址传递这种方式。比如:

char* strcpy(char *dest,const char *src);

往期文章列表:****往期热文:
基础C语言知识串串香(1)

基础C语言知识串串香(2)

基础C语言知识串串香(3)

基础C语言知识串串香(4)

基础C语言知识串串香(5)

基础C语言知识串串香(6)

基础C语言知识串串香(7)


===========我是华丽的分割线===========


更多知识:
点击关注专题:嵌入式Linux&ARM

或浏览器打开:https://www.jianshu.com/c/42d33cadb1c1

或扫描二维码:

相关文章

  • 基础C语言知识串串香8☞指针精髓

    三、指针精髓 3.1 printf("%p\n");其中%p表示输出一个指针,就是指针变量(其存放的那个地址),可...

  • iOS开发 -- C语言基础8(指针)

    iOS开发 -- C语言基础8(指针) 指针是C语言中非常重要的数据类型,如果你说C语言中除了指针,其他你都学得很...

  • iOS开发系列文章[转]

    C语言 iOS开发系列--C语言之基础知识 iOS开发系列--C语言之数组和字符串 iOS开发系列--C语言之指针...

  • NDK开发--C语言指针(数组指针,函数指针)

    上一节 C语言基础部分我们了解了C语言中的指针知识,这一节我们开始深入指针的学习,重点是数组指针,函数指针。 第一...

  • 两道面试题所引发的C指针的思考

    C语言是一门使用比较广泛的高级编程语言,而指针则是C语言的精髓所在,可以说学习C语言不会灵活使用指针就谈不上精通C...

  • JNI开发系列①JNI概念及开发流程

    接续上个系列C语言基础及指针 引言 在学习了C语言基础之后 ,我们简单的了解了C语言编程的一些范式 , 了解了指针...

  • Python源码剖析笔记0——C语言基础回顾

    要分析python源码,C语言的基础不能少,特别是指针和结构体等知识。这篇文章先回顾C语言基础,方便后续代码的阅读...

  • 2017/12/08课后总结

    今天董老师介绍了一下C语言中的指针。很多人说C语言能够经久不衰的精髓就在于指针,很多接触C语言的人都卡在这个坎上。...

  • c语言学习大纲

    1.目的:了解c语言学习大纲 和相关的基础知识 2.技术知识: C语言学习大纲 1、面试指针数组结构体 2、程序逻...

  • C语言基础及指针⑤动态内存分配

    接续上篇C语言基础及指针④函数指针 在上一篇我们了解C语言中的函数及函数指针 , 使用函数指针 , 模拟了网络请求...

网友评论

    本文标题:基础C语言知识串串香8☞指针精髓

    本文链接:https://www.haomeiwen.com/subject/yefdvqtx.html