C初级_指针

1.递归复习

(递归就是一层层的进行计算)
例如 求 123……*n 的值

int fun(int n)
{
	if(n<=1) return 1;
	else  return fun(n-1)*n;
}

2.指针

1.内存地址和指针
地址:变量在内存中的位置
地址说明:
通过地址可以访问和修改变量
变量在内存中存放的地址是随机的,但是连续的几个变量在内存中的地址是连续的
变量的地址实际上是该变量在内存中第一个字节的地址
(字节、比特、变量长度请见链接字节、比特、变量
指针:指针用来存放地址的类型
指针说明:
指针会与基本数据类型搭配使用,因为每个地址又存放不同的数据类型
指针通过地址访问和修改变量的值
指针作用:1.函数传参 2.使用堆内存
2.指针定义和使用方式
指针就是地址、指针变量用来存放地址
指针是有类型的 地址没有类型
指针定义格式:
类型 *指针变量名

int *p;//表示定义了一个名为p的短整型指针变量

针涉及到的符号:
%p 格式占位符,用于打印地址格式的格式占位符
* 解引用运算符,注意与指针定义时候的区别(详细区别请见后文)
指针与数组相关说明:
1.数组相当于指针,且数组传递时,只传递数组的首地址
2.数组只要定义,那么首地址就固定不会改变,但是指针的首地址是可以改变的
3.[]也表示解引用
4.指针加减法:

  • 两个指针相加得到的值不是相加的地址,是无意义的

  • 两个指针的减法可以表示两个地址之间相差了多少个地址

  • 指针(数组)+1 -1可以指向下一个地址(注意 +1 -1可能存在越界问题)

  • 指针可以有自加 自减运算,但是数组不行,数组是通过+1 -1的方式进行

5.通过指针改变实参值(请见后文代码实例)
6.指针与数组易混符号说明:

int *p1,*p2,*p3,*p4,n;//表示定义一个指针
int arr[10];//表示定义一个具有10短整型变量的数组
p1=arr;
p2=&arr[0];//p1与p2是相同的含义,将arr的首地址赋值给指针p
*p3=5;//表示将5赋值给指针p3,
p4=&n;//表示将n的地址赋给p4

3.拓展知识

操作系统64 or 32 说的就是指针的寻址空间
64位指针—>8个字节
32位指针—>4个字节
表示内存地址能够使用的空间
2^32个字节的内存可用,那么内存条不用超过4个G
2^64个字节的内存可用,内存条,,,起码几个T不能满足

4.代码实例

#include<stdio.h>
#include<iostream>

void swap(int x, int y)
{
 int temp;
 temp = x;
 x = y;
 y = temp;
}

void swap2(int* px, int* py)
{
 int temp;
 temp = *px;
 *px = *py ;
 *py = temp;
}

void showArr(int arr[],int n)//实质上传递的是数组首地址,就是一个指针
{
 for (int i = 0; i <n ; ++i)
 {
  printf("%-4d", arr[i]);
 }
}

int main()
{
 int y;
 printf("用来说明指针的占位符是百分号P%p\n", &y);

 int m;
 int* p;//定义指针变量 p
 p = &m;//将短整型变量y的地址赋值给指针变量p
 *p = 2;//单独的* 表示解引用,左边表示将2赋值给y

 int a = 3, b = 4;
 swap(a, b);
 printf("\n本处的输出用来说明,形参的改变无法改变实参%d%d", a, b);
 swap2(&a, &b);
 printf("\n本处的输出用来说明,形参的指针变量可以改变实参%d%d", a, b);

 printf("\n\n用来进行数组形参传参的展示\n");
 int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
 showArr(arr,10);

 int brr[10] = { 1,2,3,4 };
 printf("\n\n用来说明指针与数组之间的加减运算\n");
 printf("\n地址差   %p\n", &arr[9] - &arr[4]);
 printf("arr4   %p\n", &arr[4]);
 printf("arr5   %p\n", &arr[5]);
 printf("arr6   %p\n", &arr[6]);

 printf("指针+1   %p\n", &arr[4] + 1);
 printf("指针-1   %p\n", &arr[4] - 1);
 system("pause");
 return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_41743247/article/details/88560375