C语言初阶-C语言指针听不懂?来这里让你期末考试得高分
★导航★
前言-
♥哈喽,大家好,我是大鹏,希望大家给个关注和赞支持一下 ,球球了~♥
这篇文章将会讲到什么是c语言指针,c语言指针的定义,指针如何使用,二级指针
咱们废话不多说,直接进入正题。
★一.什么是C语言指针
这就需要从内存说起,内存是由许多个内存单元组成的,一个内存单元就是一个字节,对于32位的计算机,一共有32条地址线和32条数据线,又因为在计算机内储存信息的方式为2进制,
00000000000000000000000000000000
00000000000000000000000000000001
00000000000000000000000000000010
...
11111111111111111111111111111111 一共有2的32次方种数据
而每个数据就代表着一个地址,也就是分别标记着内存单元,这样当在内存单元里存取数据时,利用指针就可以找到具体的位置
因为用二进制表示地址的话数据位数会特别长,所以我们这里用16进制表示地址 ,指针记录的便是地址的多少,地址的本质也就是数字,大家不必把它想得太高大上
★二.C语言指针的定义,
至于指针在函数中的定义,见代码
#include<stdio.h>
int main()
{
int a = 10;//定义整型变量a,会在内存中开辟一块空间
int* p = &a;//*告诉我们p是一个指针变量,数值为a的地址,int表示p指向的对象的数据类型是int
return 0;
}
*号表示定义的为指针型变量;
注意:整形数据的指针在32位机器中所占4个字节,在64位机器中占8个字节
同理,指针可以指向不同的数据类型,但指针的定义必须为和所指地址中存放的数据类型相同
#include<stdio.h>
int main()
{
char a = ‘b’;//定义字符型变量a,会在内存中开辟一块空间
char* p = &a;//*告诉我们p是一个指针变量,并且值为a的地址
return 0;
}
#include<stdio.h>
int main()
{
double a = 1.5;//定义双精度浮点型变量a,会在内存中开辟一块空间
double* p = &a;//*告诉我们p是一个指针变量,值为指向a的地址
return 0;
}
★三.如何使用C语言指针
1指针的调用
咱们直接上代码
#include<stdio.h>
int main()
{
int a=10;
int* p=&a;
printf("%d",*p);//*p代表p指针所指向内存中所存放的数据
return 0;
}
这里的int类型也可以换为其他数据类型比如:short,double ,float等等
2.指针的+-运算
#include <stdio.h>
int main()
{
char* a;
short* b;
int* c;
a = (char*)1;
b = (short*)1;
c = (int*)1;
a = a+5;
b = b+5;
c = c+5;
printf("%d %d %d n",a,b,c);
return 0;
}
总结:指针的运算时,当指针指向的类型所占n个字节是,指针加1便会使指针往后跳n个字节变成新的指针。
在这里数组是一个鲜明的例子
#include<stdio.h>
int main()
{
int arr[]={1,2,3,4,5};
int* p=arr;
int* pa=arr+1;
printf("%d %d",*p,*pa);
return 0;
}
输出结果为1,2
注意:这里*p表示指针p所指地址中存放的值
由此可以看出指针加减运算时是根据所定义的数据类型来决定跳几个字节的,这里定义的整型为4个字节,当指针加1时在数组找到另一个整型数据(也就是跳了4个字节)
注意:这里大家直接背过就行,指针在数组中的应用比如arr[0]的地址为a,则arr[1]的地址为a+1
★四.野指针
1.未被定义的指针
#include<stdio.h>
int main()
{
int a = 10;//定义整型变量a,会在内存中开辟一块空间
int* p ;//*告诉我们p是一个指针变量,但没有被定义指向,所以这里为野指针
return 0;
}
默认定义的指针p会是一个随机值,
注意:这就提醒我们不用指针的时候,或者定义的时候加上一个NULL;
int *p=NULL;//定义p为一个空指针,避免成为野指针
2.越界的指针
#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
int i = 0;
int* p=arr+12//指针越界,得到的将会是一个随机的地址
return 0;
}
★五.二级指针
二级指针也就是 指向指针地址的指针,我们直接见代码
int a=10;
int* p=&a;
int** pa=&p;//pa为指向p指针的指针
注意:定义二级指针时要加上两个*,当要取值时:
**pa=*p=a=10;
如上代码所示使用。
今天就讲到这里,大家加油呀。