C语言指针和数组知识总结(上)

来源:互联网 发布:php array shift函数 编辑:程序博客网 时间:2024/05/02 03:07
C语言指针和数组知识总结(上)


一、指针的基础


1.C语言中,变量的值能够通过指针来改变,打印指针的语句符号可以是:  %08x 


2.指针的本质
指针的本质就是变量,那么既然是变量,那么一定会分配地址.只不过指针里面保存的是地址.


3.传递地址和传递值的区别


函数传参数只是一个赋值/拷贝的作用,所以在函数值传递和地址传递有如下区别:


值传递不能改变函数体外部的变量,地址传递可以改变函数体外部的变量.


4.那么什么场合需要用到地址传递呢?


注意两点: 
第一个是实现对函数体外部的变量进行修改
第二个是复杂函数数据类型传递的时候(极大的提高了C语言的执行效率)


5. #define led(m) m?(n = 1):(n = 0)


6.注意const的用法


int const* p 和 int *const p的区别


二、数组的基础


1.数组是相同类型变量的有序集合.
2.数组名代表数组首元素的地址.
3.数组的地址需要用取址符号才能够取到.
4.数组首元素的地址值和数组的地址值是一样的.
5.数组首元素的地址和数组的地址是两个不同的概念.


6.数组和指针一个非常重要的区别


1_1.c中char* p = "abcd";1_2.c中extern char* p[]




如果直接打印的话是打印的地址. 请仔细分析.




三、指针和数组的区别


1.指针形式访问数组元素与用数组下表形式访问数组元素两者运行效率
对比可以发现:指针形式以递增的方式访问数组元素比以下标方式访问速度更快


2.指针知识检测的一个实例(摩托罗拉面试题)


#include <stdio.h>int main(){  int a[] = {1,2,3,4,5};  int* p1 = (int*)(a + 1);  int* p2 = (int*)(&a + 1);  int* p3 = (int*)((int)a + 1);    printf("%d \n %d \n %d \n",p1[3],p2[-1],p3[0]);}




打印结果如下:
5 5 33554432




具体可自行分析.


3.一个处理器大小端检测的程序实例
#include <stdio.h>int main(){  int a = 0x1234;    char *p1 = (char*)((int)&a);    char *p2 = (char*)((int)&a + 1);     printf("p1 = %08x,*p1 = %x !! \n",p1,*p1);    printf("p2 = %08x,*p2 = %x !! \n",p2,*p2);       if((*p1) == 0x34 && (*p2) == 0x12)    printf("this machine is Little edian !! \n");    else     printf("this machine is Big edian !! \n");  }



打印结果如下:
p1 = bf84f814,*p1 = 34 !! p2 = bf84f815,*p2 = 12 !! this machine is Little edian !! 


结果明了.


4.指针运算公式


指针运算可用如下公式来计算:
p+n = (unsigned int)p + n*sizeof(*p) ;




从这个公式中可以看出.对于数组a来说,虽然,a和&a是相等的,但是其表示的含义一定是不一样的.


5.字符串长度


字符串长度指的是第一个'\0'结束之前的字符的个数


三、一个经典的面试题:
如何用一句话实现求字符串的长度


#include <stdio.h>#include <assert.h>int strlen(char *s){  return (assert(s),(*s ? (strlen(s+1)+1):0));}int main(){    printf("%d\n", strlen( "ddwed"));     return 0; }


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 爬山时屁股摔紫青了怎么办 宝宝不肯脱裤子拉粑粑怎么办 国家对无地农民怎么办 生完孩子骨架变大怎么办 17岁长高很慢怎么办? 出月子腿着凉了怎么办 脚着凉了脚疼怎么办 腿着凉了特别疼怎么办 孩子骨龄大2两年怎么办 和人吃饭很尴尬怎么办 头不自觉向右偏怎么办 靠墙站立腰疼怎么办 小腿酸痛乏力肌肉萎缩怎么办 搬重物后手臂疼怎么办 和尚鹦鹉吃了盐怎么办 刚买鹦鹉不上手怎么办 word的文件时间改了怎么办 图强gps编码丢失怎么办 武统台湾后岛民怎么办 没有你我怎么办是什么歌 ios 12软件闪退怎么办 来大姨妈想吐怎么办 3岁宝宝体重轻怎么办 硕士延期毕业考上博士怎么办 中国人移民欧洲饮食不习惯怎么办 出车祸了报警警察不管怎么办 高中的孩子不好好上学怎么办 和老公消费观念不合拍怎么办 去医院没带现金怎么办 微信读书下架了怎么办 24岁血压有点高怎么办 吃鸡鼠标弹出来怎么办 电脑分辨率调错了怎么办 猎豹sc9打不开门怎么办 苹果手机卡顿反应慢怎么办 金立手机卡顿反应慢怎么办 20天宝宝黄疸219怎么办? 智慧树选修挂科怎么办 军人被纠察抓了怎么办 我家的小孩很凶怎么办 10岁儿童老挤眼怎么办?