指针学习笔记-1


在这里插入图片描述

没有例子不说话
在这里插入图片描述
在这里插入图片描述

指向地址的指针

在这里插入图片描述
在这里插入图片描述

指针本身的大小

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

指向数组的指针

在这里插入图片描述
在这里插入图片描述

指针数组

在这里插入图片描述在这里插入图片描述

指向指针数组的指针

在这里插入图片描述在这里插入图片描述

多维指针数组

在这里插入图片描述在这里插入图片描述

函数参数中使用指针

#include <stdio.h>

int myswap(int *a, int *b){
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int x = 50;
    int y = 30;
    myswap(&x, &y);
    printf("x:%d  y:%d\n", x, y);
    return 0;
}

// x:30  y:50

// 这个程序看似简单, 但是却应用到了而很多高级的算法,
// 指针 引用 当初不理解,现在终于理解了!

数组指针传址实现数组求和

#include <iostream>
using namespace std;

int mysum(int length, int *data){
    int myresult = 0;
    int i;
    for(i = 0; i < length; i++)
    {
        myresult += *(data + i);
        cout << *(data + i) << endl;
        cout << data + i << endl;
    }
    return myresult;
}

int main() {
    int x[5] = {1, 2, 3, 4, 5};
    int restult;
    restult = mysum(5, x);
    cout << x << endl;
    printf("%d\n", restult);
    return 0;
}
// 输出结果:
//0x7ffecd866750
//1
//0x7ffecd866754
//2
//0x7ffecd866758
//3
//0x7ffecd86675c
//4
//0x7ffecd866760
//5
//0x7ffecd866750
//15

函数指针

#include <iostream>
using namespace std;

int add(int a, int b);

int main(int argc, char **argv)
{
    int (*myfunc)(int a, int b);
    myfunc = add;
    int x = myfunc(12, 36);
    cout << x << endl;
    return 0;
}

int add(int a, int b)
{
    return a + b;
}

// 48

模仿C++ 类别

#include <iostream>
using namespace std;

struct mynum{
    int a;
    int b;
    int result;
    void(*mod_add)(int a, int b, int *result);
};

void madd(int a, int b, int *result){
    (*result)=(a + b) % 13;
}

int main(void){
    struct mynum mnum;
    mnum.a = 12;
    mnum.b = 26;
    mnum.mod_add=madd;
    mnum.mod_add(mnum.a, mnum.b, &mnum.result);
    cout << mnum.result << endl;
    return 0;
}

// 12
发布了425 篇原创文章 · 获赞 59 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/qq_21950671/article/details/103983731