文章目录
- 指针变量内存
- 指针详解
- 例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
、*p
、p
、**s
、*s
、&s
、s
的值
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
的解析内容可得