1.第一种实现swap函数的方法是: swap(int a,int b) { Int c = a;a = b;b =c; } 这表面一看确实是实现了整数a,b的交换,当拿来用时发现,结果并不是我们想要的.分析一下原因:在main中int x=1,y=2;然后调用swap(x,y):这相当于int a = x ; int b = y;这样完成了赋值操作(对形参赋值),在swap函数内部对a和b的替换和main中的x,y没有任何关系了,所以当然不能完成x,y的互换了. 2.现在呢,来看一下第二种实现…
今天遇到一个C函数指针的小坑,索性记下来. 我在a.c 文件里面,引用b.c 文件的函数声明作为指针引用 比如在a.c生命一个函数指针 typedef void (*free)(void *val) fun b.c中的有一个函数 void char_free(void* val){ if (val) LIST_FREE(val); } 但是当我编译的时候 编译器报错:‘char_free’ undeclared 我就纳闷了,一般情况下,在同一可执行程序的源文件中,只要函数不声明为static,其…
上次,一个同学问我,你知不知道可以不用引入中间变量就可以实现swap? 我说,我知道,可以用加减法或者异或实现,像是这样 void mySwap(int &x,int &y) { x=x+y; y=x-y; x=x-y; } 或者这样 void mySwap(int &x,int &y) { x=x^y; y=x^y; x=x^y; } 但这种花式swap没什么意义,而且具有风险,那就是如果参数引用的是同一个变量,将产生错误的结果0. 这种问题叫pointer aliasi…
先看一个例子:这个程序为什么会崩溃? #include <stdio.h> #include <stdlib.h> int f(int *q) { ; q = (int*)malloc(sizeof(int)); *q = a; ; } int main() { int *p = NULL; f(p); printf("%d", *p); ; } 此处的q任然是p的一个拷贝,可以通过这个程序证明: #include <iostream> int f(…
C++中函数的形参如果为数组的话,那么进行实参传递时,实参实际上换转化成指针.参考下面的例子: #include<iostream> using namespace std; void fun(int arr[]) { arr[0] = 9; } int main() { int a[] = {1,2,3}; int *b = new int[1]; *b = 2; fun(a); cout<<a[0]<<endl; fun(b); cout<<b[0]&l…
C++ 函数的参数传递可以分为:值传递和引用传递. 两者的最大区别也很简单,如果该函数的参数只是读的话,值传递就可以满足.如果该函数的参数需要进行修改并返回的时候,就应该进行引用传递. C++指针作为参数也遵循以上原则,先来看几个例子: void test1(int *p) { *p = ; } int main() { ; int *p = &a; std::cout << *p << std::endl; test1(p); std::cout << *p…
题目: Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2->3->4, you should return the list as 2->1->4->3. Your algorithm should use only constant space. You may not modify the values in the list,…
区别: 1.指针传参被调用函数的指针变量在栈内存中重新申请内存. 2.指针引用传参被调用函数的指针变量与调用函数的指针变量共用一块空间. // PointerCite.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using namespace std; void freePtr1(int* p1){ /*未释放内存前 -> p1 Address : 0012FDDC p1 value…
看个小例子: char* fun1(){ char * p = (char*)malloc(100); p = "helloww"; return p;} void fun2(char *p){ p = "hello";} fun1 完成了指针的赋值和返回指针区域.    fun2 因为p的局部赋值而无法再函数跳出后带值.…
首先,创建一个正常的数组 int A[20];.然后用指针指向其中间的元素 int *A2 = &(A[10]); 这样,A2[-10 ... 9] 就是一个可用的有效范围了. 1 2 3 4 5 6 7 8 9 10 11 12 13 /* 样例示范 */ #include <stdio.h>   int main(int argc, const char *argv[]) {     int A[20], *A2 = &(A[10]), i;           for(i…