C++之C语言指针

目录

一 指针简介

二 数组与指针

三 二维数组与指针

四 字符串与指针

五 指向指针的指针

六 指针变量作为函数参数

七 返回指针值的函数

八 指针数组作为main函数的参数


一 指针简介

地址:指数据在内存单元中的编号,根据该编号便能找到内存单元,从而找到内存单元中存储的数据。

变量的地址使用取地址符 “&”获取。地址也被称为指针,意思就是通过它能访问以它为地址的内存单元。

#define  _CRT_SECURE_NO_WARNINGS

#include<stdio.h>  

#include<string.h> //字符串处理头文件



int main()

{

    int a = 120;

    int* p = &a; //指针变量p存储了变量a的地址,



    //如果是先定义指针变量在赋值时,则不需要指针符号 *,

    int* b;

    b = &a;



    /*

     & 是取地址运算符,用于返回一个操作数的地址。

    "*"是指针运算符,用于返回指定地址内保存的变量值。



   “ &*”表示先进行* 运算,在进行 &运算,相当于取变量的地址, &*一起使用时遵循自右向左的运算规则;

   “*&”表示先进行 & 运算,在进行 * 运算,相当于取变量a所在地址的值,实际上就是变量a , *& 一起使用时遵循自右向左的运算规则;

    *

   */



    int c = *&a;  //取变量a的值

    int* d = &*p; //取变量p的地址



    printf("%d ,%p  \n", c, d);



    d++;//指针自增,表示增加一个int型所占用的字节,及自增一次增加4个字节

    printf("%p \n", d);



    d--;//指针自减,表示减少一个int型所占用的字节,及自减一次减少4个字节

    printf("%p", d);







    return 0;

}

二 数组与指针

一维数组与指针

#define  _CRT_SECURE_NO_WARNINGS

#include<stdio.h>  





int main()

{

    int a[] = { 12,23,32 };  //定义一个数组

    int* p = a;//把数组的首地址赋值给指针P,(数组名称就是数组在内存中的首地址)。  int* p = a; 等价于  int* p = &a[0];



    //使用指针遍历数组

    for (int i = 0; i < 3; i++)

    {

        printf("%d ,", *(p + i)); //这里的 *(p + i)代表先让指针自增,然后在取指针指向的地址值,p + i 则表示每个数组元素对应的地址

    }





    //使用指针的自增运算符来遍历数组

    for (int i = 0; i < 3; i++)

    {

        printf("%d ,", *p++);

    }





    return 0;

}

三 二维数组与指针

#define  _CRT_SECURE_NO_WARNINGS

#include<stdio.h>  





int main()

{

    int a[2][3] = { 12,23,32,89,77 };  //定义一个二维数组

    int* p = a[0];//把P设置为第一行元素的首地址



    //使用指针遍历数组

    for (int i = 0; i < 5; i++)

    {

        printf("%d ,", *(p + i)); //这里的 *(p + i)代表先让指针自增,然后在取指针指向的地址值,p + i 则表示每个数组元素对应的地址

    }



    printf("\n");



    //使用指针的自增运算符来遍历数组

    for (int i = 0; i < 5; i++)

    {

        printf("%d ,", *p++);

    }





    return 0;

}

四 字符串与指针

#define  _CRT_SECURE_NO_WARNINGS

#include<stdio.h>  





int main()

{

    //首先定义一个字符串数组,然后再把数组名称赋给指针,使用时访问指针名称便能够得到字符串

    char a[] = {"hello world"};

    char* b = a;

    printf("%s", b);





    

    char test[] = { "hello"};

    //指针数组: 数组的每一个元素都是指针变量

    char* p[] = {b,test,a};

    //遍历指针数组

    for (int i = 0; i < 3; i++)

    {

        printf("%s ,",p[i]);

    }



    return 0;

}

五 指向指针的指针

一个指针可以指向整型变量、实型变量、字符型变量,当指向另一个指针时,便称作指向指针的指针。

#define  _CRT_SECURE_NO_WARNINGS

#include<stdio.h>  





int main()

{

    int i[] = { 10,22,19,2093 };

    int* p1 = i;

    //将p1的指针赋给双重指针p2

    int** p2 = &p1; //定义一个指向指针的指针变量,这种场合适用于多层级指针嵌套的场合,比如数组的数组。



    //使用指针遍历元素

    for (int i = 0; i < 4; i++)

    {

        //*(*p2+i) 的含义是:*p2得到数组的首地址(相当于得到指针p1),然后再再p2的前面加 *来得到元素值,最后再让指针自增来遍历整个数组元素

        printf("%d ,", *(*p2+i));

    }

   

    return 0;

}



六 指针变量作为函数参数

#define  _CRT_SECURE_NO_WARNINGS

#include<stdio.h>  



//定义函数,形参为两个指针

void add(int *a, int *b) {

    printf("%d", *a + *b);

}

int main()

{

    int a = 12;

    int b = 32;

    add(&a, &b); //传入实参,类型为指针

   

    return 0;

}

七 返回指针值的函数

#define  _CRT_SECURE_NO_WARNINGS

#include<stdio.h>  



//定义函数,形参为两个指针,返回值为指针类型

int *add(int *a, int *b) {

    int sum = *a + *b;

    return ∑

}

int main()

{

    int a = 12;

    int b = 32;

   int *sum= add(&a, &b); //传入实参,类型为指针

   printf("%d", *sum);//在指针前面再次加上 *代表取出指针指向的值





    return 0;

}

八 指针数组作为main函数的参数

#define  _CRT_SECURE_NO_WARNINGS

#include<stdio.h>  



int main(int argc,char *args[])

{

    printf("%d ,%c", argc, args);

    return 0;

}

猜你喜欢

转载自blog.csdn.net/XiaoWang_csdn/article/details/131019287