C语言指针和数组知识总结(上)
2013-09-12 15:23
681 查看
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.指针形式访问数组元素与用数组下表形式访问数组元素两者运行效率
对比可以发现:指针形式以递增的方式访问数组元素比以下标方式访问速度更快
2.指针知识检测的一个实例(摩托罗拉面试题)
打印结果如下:
具体可自行分析.
3.一个处理器大小端检测的程序实例
打印结果如下:
结果明了.
4.指针运算公式
指针运算可用如下公式来计算:
从这个公式中可以看出.对于数组a来说,虽然,a和&a是相等的,但是其表示的含义一定是不一样的.
5.字符串长度
字符串长度指的是第一个'\0'结束之前的字符的个数
三、一个经典的面试题:
如何用一句话实现求字符串的长度
一、指针的基础
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; }
相关文章推荐
- C语言中 指针的基础知识总结, 指针数组的理解
- C语言指针和数组知识总结(下)
- C语言指针和数组知识总结(下)
- C语言指针和数组知识总结(上)
- C语言如何输出数组内容以及指针相关知识
- 读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组
- C---指针与数组知识总结
- C语言数组与指针学习总结
- C语言中_指针_的相关知识总结
- C语言的数组、字符串等一些知识总结
- C语言指针基础知识总结
- c语言:为什么不进行下标检查,总结下指针和数组
- 读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组
- C语言关于数组、指针、函数和结构体的其他知识
- 总结C语言指针部分的知识
- 读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组
- C/C++基础知识总结——数组、指针域、字符串
- c语言的申明,指针和数组的学习总结
- C语言中关于数组、指针以及函数的一些基本知识
- c语言字符串与数组还有指针的总结(1)