c语言指针理解

基本理解

#include 
#include 
int main(){
    SetConsoleOutputCP(65001);
    int var=20;
    int p=var;
    printf("%d\n",var);
    printf("%d\n",p);
    printf("%p\n",&var);
    printf("%p\n",&p);
    return 0;
}

%p是指针的值的意思

c语言指针理解_第1张图片

  结果看 var和p的值虽然一样,但是两个变量是指向两个内存地址。

那如果改变var变量的值

#include 
#include 
int main(){
    SetConsoleOutputCP(65001);
    int var=20;
    int p=var;
    printf("%d\n",var);
    printf("%d\n",p);
    printf("%p\n",&var);
    printf("%p\n",&p);
    printf("-------\n");
    var=11;
    printf("%d\n",var);
    printf("%d\n",p);
    printf("%p\n",&var);
    printf("%p\n",&p);
    return 0;
}

c语言指针理解_第2张图片

 可以看到var的值变了,p的值没变 而且两个变量的内存地址也不变,也就是说这只是一个简单的改变值得过程,如果你要想变量p根据var值变化而变化,那p就要指向var的内存地址

如下,看下下面的的代码理解下

#include 
#include 
int main(){
    SetConsoleOutputCP(65001);
    int var=20;
    int *p;
    p=&var;
    printf("%d\n",var);
    printf("%d\n",*p);
    printf("%p\n",&var);
    printf("%p\n",p);
    printf("-------\n");
    var=11;
    printf("%d\n",var);
    printf("%d\n",*p);
    printf("%p\n",&var);
    printf("%p\n",p);
    return 0;
}

c语言指针理解_第3张图片

var 是( 值 | 地址 ) 就是  ( 20 | &var)

*p是指针变量,指向 var的地址,相对于var 以p来表达就是( *p | p)就是( 值 | 地址 )

指针算数运算

#include 
#include 
int main(){
    SetConsoleOutputCP(65001);
    int var[]={10,100,200};
    int *ptr;
    ptr=&var[0];// 也可以是ptr=var
    for(int i=0;i<3;i++){
        printf("var[%d]值:%d\n",i,*ptr);
        printf("var[%d]地址:%p\n",i,ptr);
        ptr++;
    }
    return 0;
}

c语言指针理解_第4张图片

指针数组

#include 
#include 
#define MAX 3
int main(){
    SetConsoleOutputCP(65001);
    int var[MAX]={10,100,200};
    int *ptr[MAX];
    for(int i=MAX-1;i>=0;i--){
        ptr[i]=&var[i];
        printf("%d\n",*ptr[i]);
    }
    return 0;
}

 字符串数组指针

#include 
#include 
#define MAX 3
int main(){
    SetConsoleOutputCP(65001);
    char *name[]={
        "小白",
        "小红",
        "小明"
    };
    for(int i=MAX-1;i>=0;i--){
        // printf("%s\n",name[i]);
        puts(name[i]);
    }
}

指向指针的指针

#include 
#include 
#define MAX 3
int main(){
    SetConsoleOutputCP(65001);
    int a=1;
    int *b,**c;
    b=&a;
    c=&b;
    printf("%d\n",a);
    printf("%d\n",*b);
    printf("%d\n",**c);
    printf("%p\n",&a);
    printf("%p\n",b);
    printf("%p\n",c);
}

c语言指针理解_第5张图片

传递指针给函数

指针作为参数的函数

#include 
#include 
void countFun(int *s){
    *s=1;
}
int main(){
    SetConsoleOutputCP(65001);
    int size=0;
    countFun(&size);
    printf("%d",size);
}

 

你可能感兴趣的:(c/c++,c语言,c++,数据结构)