指针的入门和理解

简介: /* ============================================================================ Name : TestPointer.
/*
 ============================================================================
 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");
}



相关文章
|
4月前
|
存储 安全 编译器
【C++专栏】C++入门 | auto关键字、范围for、指针空值nullptr
【C++专栏】C++入门 | auto关键字、范围for、指针空值nullptr
62 0
|
4月前
|
存储 C语言 C++
c语言从入门到实战——数组指针与函数指针
数组指针和函数指针都是指针类型,但是它们指向不同的数据类型。 数组指针:数组指针指向的是数组类型。 函数指针:函数指针指向的是函数类型。 数组指针和函数指针是C语言中的两种重要指针类型。数组指针指向一个数组,可以用来访问和修改数组中的元素;而函数指针则指向一个函数,可以用来调用该函数。两者在语法和用法上有所不同,需要仔细区分。正确理解和使用它们可以提高程序的效率和可维护性。
47 0
|
4月前
|
存储 安全 编译器
c语言从入门到实战——初识指针
C语言指针是一种变量,它存储了另一个变量的内存地址。通过指针,我们可以直接访问内存中的数据,从而实现灵活的数据操作。 指针是编程中的一个概念,它存储的是内存地址,指向某个变量。通过指针,可以直接访问和操作内存中的数据,提高程序效率。但使用指针时需小心,避免空指针和野指针等问题,确保程序安全稳定。
73 0
|
1月前
|
存储 安全 编译器
C++入门 | auto关键字、范围for、指针空值nullptr
C++入门 | auto关键字、范围for、指针空值nullptr
49 4
|
23天前
|
Go 计算机视觉
Go从入门到放弃之指针
Go从入门到放弃之指针
|
2月前
|
存储 安全 编译器
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
|
4月前
|
算法 测试技术 容器
【刷题】双指针入门
经过这四道题目的洗礼,我大概对双指针有了初步印象,接下来我会继续努力!!!
68 13
【刷题】双指针入门
|
4月前
入门后指针进阶习题深度分析
入门后指针进阶习题深度分析
35 1
|
4月前
|
存储 编译器 C++
【C++成长记】C++入门 | 类和对象(上) |类的作用域、类的实例化、类的对象大小的计算、类成员函数的this指针
【C++成长记】C++入门 | 类和对象(上) |类的作用域、类的实例化、类的对象大小的计算、类成员函数的this指针
|
4月前
|
存储 编译器 Linux
【C++】C++入门第二课(函数重载 | 引用 | 内联函数 | auto关键字 | 指针空值nullptr)
【C++】C++入门第二课(函数重载 | 引用 | 内联函数 | auto关键字 | 指针空值nullptr)