/*
============================================================================
Name : TestPointer.c
Author : lf
Version :
Copyright : Your copyright notice
Description : 指针的入门和理解
一个程序载入内存时,系统会为变量和函数均分配内存,所以每个变量和函数都有其对应的内存
地址.
所以在C语言中有一个很常见的操作&就是用来取地址的;
而*是操作是用来:根据地址取出该内存地址对应的内存单元中的数据.
即*操作根据地址取出内容
小结:
int num=9527;
int *p=#
1 既然&操作是为了取变量的地址.
比如语句&num,num是一个变量&num就是取变量的地址.
那么*p操作也是类似的原理.
*操作是根据地址取出内容
比如语句*p,p就是一个地址;*p就取出了该地址里保存的数据.
所以p和&num是等价的!!!!
2 为什么在*p前面有一个int修饰呢?
因为p仅仅是一个开始地址,这里int就告诉了程序访问的范围
即从p这个开始地址开始,到(p+int类型的长度)的地址作为结束.
============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
int main(void) {
testPointer();
pointerSize();
return EXIT_SUCCESS;
}
/**
* &num取变量的地址.
* 其实&num也是一个指针,它就指向了num.参见:
* printf("*(&num)=%d,num=%d\n",*(&num),num);
*
* int num=9527;
* int *p=#
* 要清楚一点:
* &num是一个常量,但是p是一个指针变量可以存储一个地址
*/
void testPointer(){
int num=9527;
int *p=#
//指针p本身在内存中的地址
printf("&p=%x\n",&p);
printf("===========\n");
//p中保存了num的地址.所以p和&num等价!!!!
printf("p=%x,&num=%x\n",p,&num);
printf("===========\n");
//*p,得到p中保存的地址且取出改地址里保存的值.
//所以*p和num等价
printf("num=%d,*p=%d\n",num,*p);
printf("===========\n");
/**
* 由上小结:
* 1 既然&操作是为了取变量的地址.
* 比如语句&num,num是一个变量&num就是取变量的地址.
* 那么*p操作也是类似的原理.
* 2 *操作是根据地址取出内容
* 比如语句*p,p就是一个地址;*p就取出了该地址里保存的数据.
* 所以上面的例子中可以看到p和&num是等价的!!!!
*/
//因为&num是一个地址,其实也是一个指针,指向了num
//所以用 *(&num)取出该指针指向的值.
//*(&num)和num是等价的
printf("*(&num)=%d,num=%d\n",*(&num),num);
printf("===========\n");
}
/**
* 指针的大小.
* 指针是一个地址,所以它都是32为的.
* int *int_pointer
* char *char_pointer;
* double *double_pointer;
* 它们都是32位的,代表了一个开始地址!!!
*/
void pointerSize(){
int *int_pointer;
char *char_pointer;
double *double_pointer;
printf("int_pointer size=%d\n",sizeof(int_pointer));
printf("char_pointer size=%d\n",sizeof(char_pointer));
printf("double_pointer size=%d\n",sizeof(double_pointer));
printf("===========\n");
}
指针的入门和理解
最新推荐文章于 2025-09-12 18:45:12 发布