我是靠谱客的博主 孝顺芝麻,最近开发中收集的这篇文章主要介绍C语言---指针知识点(1),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

    • 指针的相关概念

什么是地址?

地址是操作系统给给每个存储单元分配的编号,32位的从0x00 00 00 00---0xff ff ff ff。

指针的大小也就是4个字节或八个字节组成(与指针的类型无关)

原理:指针的大小只由编译器决定,比如32位系统,指针为4个字节大小;而64位系统中指针大小为8个字节。

#include <stdio.h>
int main()
{
    int a[3][5] = { 0,1,2,3,4,5,6 };
    int* p;
    printf("%p,%d",*a,sizeof(p));
    return 0;
}//64位编译器
  • 指针与地址的关系(自我理解)

指针变量存放的是地址编号,通过*操作符来对该地址编号对应的内存单元进行取值操作。

指针的大小由编译器决定,为4或8个字节,而一个内存单元的大小为1个字节,1个内存单元对应一个地址编号。所以32位中一个指针占据4个内存单元大小。指针也是有地址编号的,因为其在内存中开辟一块4个字节大小的连续空间来存放地址编号。

指针类型:char * int * double* float*(指针的大小与类型无关)

#include <stdio.h>
int main()
{
int* a;
char* b;
double* c;
float* d;
printf("%dn",sizeof(a));
printf("%dn",sizeof(b) );
printf("%dn", sizeof(c));
printf("%dn", sizeof(d));
return 0;
}
  • 指针类型的作用:

指针类型决定解引用时访问几个字节;一个int类型指针就直接访问4给字节的空间,一个char类型就只能访问一个空间的内存等等

指针类型决定了指针向前一步或向后一步能走多远的距离。就比如说int类型的指针加一个单位就相当于走了四个字节的空间。

  • 指针与指针相减:得到的是之间元素的个数

1.指针不适合做加法运算,一般用于减法运算

2.指针做减法运算时,一定要指向同一个数组,相减结果是两个指针之间的元素的数目,而不是两个指针之间相差的字节数

  • 指针与数组

C语言规定一维数组的数组名就是地址,是固定的不允许改变的。

sizeof(数组名)--------计算整个数组的大小。

&数组名-------取址符+数组名代表取出的是整个数组的地址。

一维数组的数组名表示的是一维数组首个元素的地址---相当于列指针,指向的是元素的地址

二维数组的数组名表示的是首行的地址---相当于行指针,指向的是二维数组首行的地址。

#include <stdio.h>
int main()
{
    int a[2][3] = {1,2,3,4,5,6};//定义一个二维数组
    int(*p)[3] = a;//将第一行的地址放入数组指针p中
    int* q =& a[0][0];//将首元素地址放入指针q中
    printf("%p %pn",p, q);//第一行地址的起始位置指向的是首元素的地址
    printf("%p %p %pn", p + 1, q + 1,&a[1][0]);//p+1指向下一行的地址,q+1指向下一个元素地址

    return 0;
}
  • 二维数组的降级问题:

  • 指针和函数

当函数传地址时,用指针接收。

#include <stdio.h>
void change_num(int *p,int *q)//使用指针p和q对啊a,b的地址进行接收
{
    int temp = 0;
    temp = *p;
    *p = *q;
    *q = temp;
}
int main()
{
    int a = 25, b = 52;
    printf("a=%d,b=%dn", a, b);
    change_num(&a,&b);//将a和b的地址传过去
    printf("a=%d,b=%dn", a, b);
    return 0;
}

函数传值时,调用函数结束,形参的改变无法影响实参。

数组传参----二维数组传参----数组指针接收

#include <stdio.h>
void fun(int (*p)[3])
{
    int i = 0;
    int j = 0;
    for(i=0;i<2;i++)
    { 
        for (j = 0; j < 3; j++)
        {
            printf("%dn", p[i][j]);
        }
    
    }

}
int main()
{
    int a[2][3] = { 1,2,3,4,5,6 };
    fun(a);
    return 0;
}//打印123456

最后

以上就是孝顺芝麻为你收集整理的C语言---指针知识点(1)的全部内容,希望文章能够帮你解决C语言---指针知识点(1)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部