一级指针

//指针:一个变量的地址
//指针变量:专门存放变量地址的变量

#include<stdio.h>
#include<stdlib.h>

void main2()
{
	int num = 100;

	printf("%x\n", &num);			//&num是变量的一个地址,也是一个指针,指向变量num

	printf("%d\n", num);			//变量名就是对内存中一段空间中的数据的抽象
	printf("%d\n", *(&num));		//* 根据地址取出内容

	system("pause");
}

void main3()
{
	int num = 100;
	int x = 10;

	int *p = #			//(int *)是指向int类型变量的指针变量类型,容纳int类型变量的地址
							//p仅仅是一个起始地址,int决定截取多长,且里面的数据按照int类型来解析
							//p可以是任何变量的地址
	printf("%d,%d\n", num, *p);
	printf("%x,%x\n", &num, p);

	printf("--------------------------\n");
	p = &x;									//p可以是任何变量的地址
	printf("%d,%d\n", *p, x);
	printf("%x,%x\n", p, &x);

	*p = 200;
	printf("%d\n", x);
	
	system("pause");
}

### 概念 - **一级指针**:一级指针是指向变量地址的指针,它存储的是变量在内存中的地址。通过一级指针可以直接访问和修改其所指向变量的值。例如,对于一个整数变量 `int a = 10;`,可以声明一个一级指针 `int *p = &a;`,这里 `p` 就是一个一级指针,它指向变量 `a` 的地址,通过 `*p` 可以访问和修改 `a` 的值[^4]。 - **二级指针**:二级指针是指向指针地址的指针,即它存储的是另一个指针的地址。二级指针让我们能够间接地通过两个层次的指针来访问内存。例如,对于一级指针 `int *p;`,可以声明一个二级指针 `int **pp = &p;`,这里 `pp` 就是一个二级指针,它指向一级指针 `p` 的地址,通过 `**pp` 可以访问和修改 `p` 所指向变量的值[^2][^4]。 ### 区别 - **存储内容**:一级指针存储的是变量的地址,而二级指针存储的是一级指针的地址。 - **访问层次**:一级指针可以直接访问其所指向的变量,而二级指针需要通过两次解引用操作才能访问到最终的变量。例如,对于二级指针 `int **pp`,需要使用 `**pp` 才能访问到最终的变量值。 - **使用场景**:一级指针常用于访问数组元素、函数参数传递等场景;二级指针常用于需要修改一级指针指向的场景,如动态内存分配、函数参数传递指针的地址等[^4]。 ### 使用 #### 一级指针的使用 ```c #include <stdio.h> int main() { int a = 10; // 声明一级指针并指向变量 a int *p = &a; // 通过一级指针访问变量 a 的值 printf("*p = %d\n", *p); // 通过一级指针修改变量 a 的值 *p = 20; printf("a = %d\n", a); int arr[5] = {1, 2, 3, 4, 5}; // 数组名作为一级指针 int *ptr = arr; for (int i = 0; i < 5; i++) { printf("%d ", *(ptr + i)); } printf("\n"); return 0; } ``` #### 二级指针的使用 ```c #include <stdio.h> #include <stdlib.h> void allocateMemory(int **pp) { // 动态分配内存 *pp = (int *)malloc(sizeof(int)); **pp = 100; } int main() { int *p; // 调用函数分配内存 allocateMemory(&p); printf("*p = %d\n", *p); // 释放内存 free(p); return 0; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值