ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

【c/c++】指针例图基础详解

2026/9/21 5:29:26 拓冰建站 浏览量
【c/c++】指针例图基础详解

文章目录

  • 指针变量内存
  • 指针详解
    • 例1
    • 例2
    • 练习&答案解析

指针变量内存

int main(){// 各类型变量占字节数printf("char:   %d\n",sizeof(char));	// 1printf("short:  %d\n",sizeof(short));	// 2printf("int:    %d\n",sizeof(int));		// 4printf("float:  %d\n",sizeof(float));	// 4printf("double: %d\n",sizeof(double));	// 8printf("\n");// 各类型指针变量(不论几级指针)占8字节(64位系统)printf("char*:  %d\n",sizeof(char*));printf("short*: %d\n",sizeof(short*));printf("int*:   %d\n",sizeof(int*));printf("float*: %d\n",sizeof(float*));printf("double*:%d\n",sizeof(double*));// 各类型指针变量(不论几级指针)占4字节(32位系统)return 0;
}

指针详解

&:取地址
*:解引用(指向值)

例1

在计算机内存中,变量的内存基本上都由一段连续的内存空间组成,所以变量的地址指开辟空间的首地址

int main() {int a = 10;// 指针==地址int *p = &a;    // p 指针变量printf("*p->  %d\n", *p);return 0;
}

在这里插入图片描述

在这里插入图片描述

例2

在计算机内存中,肯定不会有图例的箭头,所以*p就代表指向的内容

int main() {int a = 10;int b = 20;int *p = NULL;int **s = NULL;p = &a;s = &p;return 0;
}

在这里插入图片描述

练习&答案解析

请依次写出执行语句1和语句2后&p*pp**s*s&ss的值

int main() {int a = 10;	// 已知--&a:0xed209ffa94int b = 20;	// 已知--&b:0xed209ffa90int *p = NULL;int **s = NULL;p = &a;	// 已知--&p:0xed209ffa88s = &p;	// 已知--&s:0xed209ffa98*p = 100;	// 语句1*s = &b;	// 语句2return 0;
}

答案&解析:

1.执行完*p = 100
&p :0xed209ffa88——指针变量p的地址
*p :100——语句1相当于执行a=100,改变了a的值,*p就是a
p : &a 或 0xed209ffa94——变量a的地址 赋值给 指针变量p自身的值

&s :0xed209ffa98——指针变量s的地址
*s :&a 或 0xed209ffa94——指针变量p自身的值,变量a的地址
**s:100——**s相当于*p,执行了语句1之后,*p=100,所以**s=100
s :0xed209ffa88

2.执行完*s = &b
&s :0xed209ffa98——指针变量p的地址
*s : &b 或 0xed209ffa90——执行了语句2之后,变量b的地址 赋值给 指针变量s指向的值*s相当于指针变量p自身的值,所以相当于让指针变量p指向变量b,相当于p=&b,相当于*p=20
**s :20——**s相当于*p,指针变量p指向的值,由上面*s的解析内容可得
s : &p 或 0xed209ffa88——指针变量p的地址 赋值给 指针变量s自身的值

&p :0xed209ffa88——指针变量p的地址
*p :20——根据上面*s的解析内容可得
p : &b 或 0xed209ffa90——根据上面*s的解析内容可得