【C】Re07 二级指针,指针与参数】的更多相关文章

1. 数组名 C语言中的数组名是一个特殊的存在, 从本质上来讲, 数组名是一个地址, 我们可以打印一个指针的值,和打印一个数组的值来观察出这个本质: int nArray[10] ={ 0 }; int *p = nArray; printf("nArray:%p , p = %p\n", nArray,p); 打印出来的将会是两个相同的值.但是数组名并不意味着和指针完全相同, 数组名还有另一个本质,数组名是一个常量,不允许被赋值. 但指针允许被赋值,例如: p = nArray; n…
本文的学习内容参考:http://blog.csdn.net/yunyun1886358/article/details/5659851 http://blog.csdn.net/xudongdong99/article/details/6723163 1.使用二维数组作为形参的例子: ]) { } int main() { ][]; func(array); //用二维数组名作为实参,调用函数 } 上面的例子可以编译通过,注意,此处一定要给出第二个维度的大小,否则编译无法通过. 2.使用一维指…
课堂笔记 课程回顾         多态 virtual关键字 纯虚函数 virtual func() = 0;         提前布局vptr指针 面向接口编程 延迟绑定 多态的析构函数的虚函数.         多继承的二义性 .         重载 重写 重定义.         实现多态的理论基础:函数指针做函数参数.         vptr指针与虚函数表.         构造函数不应为虚函数 多态会降低程序的执行速度.不建议所有的函数都是虚函数.         多态时的指针步…
1.数组指针做函数参数 示例: package main //必须有个main包 import "fmt" //p指向实现数组a,它是指向数组,它是数组指针 //*p代表指针所指向的内存,就是实参a func modify(p *[5]int) { (*p)[0] = 666 fmt.Println("modify *a = ", *p) } func main() { a := [5]int{1, 2, 3, 4, 5} //初始化 modify(&a)…
1.指针做函数参数 示例: package main //必须有个main包 import "fmt" func swap(p1, p2 *int) { *p1, *p2 = *p2, *p1 } func main() { a, b := 10, 20 //通过一个函数交换a和b的内容 swap(&a, &b) //地址传递 fmt.Printf("main: a = %d, b = %d\n", a, b) } 执行结果: main: a = 2…
1.指针做函数参数 示例: package main //必须有个main包 import "fmt" func swap(a, b int) { a, b = b, a fmt.Printf("swap: a = %d, b = %d\n", a, b) } func main() { a, b := 10, 20 //通过一个函数交换a和b的内容 swap(a, b) //变量本身传递,值传递(站在变量角度) fmt.Printf("main: a =…
结构体指针作为函数参数:结构体变量名代表的是整个集合本身,作为函数参数时传递的整个集合,也就是所有成员,而不是像数组一样被编译器转换成一个指针.如果结构体成员较多,尤其是成员为数组时,传送的时间和空间开销会很大,影响程序的运行效率.所以最好的办法就是使用结构体指针,这时由实参传向形参的只是一个地址,非常快速. #include<stdio.h> struct stu{ char *name; int score; } stus[]={ {}, {} }; void averge(struct…
在C语言中,函数的参数不仅可以是整数.小数.字符等具体的数据,还可以是指向它们的指针.用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着函数的结束而被销毁. 像数组.字符串.动态分配的内存等都是一系列数据的集合,没有办法通过一个参数全部传入函数内部,只能传递它们的指针,在函数内部通过指针来影响这些数据集合. 有的时候,对于整数.小数.字符等基本类型数据的操作也必须要借助指针,一个典型的例子就是交换两个变量的值. 有些初学者可能会使用…
一. 在学习过程中发现这"指针函数"与"函数指针"容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1.指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符    *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值.函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量. 表示: f…
前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则: 从变量名处起,根据运算符优先级结合,一步一步分析. 下面让我们先从简单的类型开始慢慢分析吧: int p; //这是一个普通的整型变量 int *p; //首先从P 处开始,先与*结合,所以说明P 是一个指针,然后再与int 结合,说明指针所指向的内…