C/C++指针、函数、结构体、共用体

指针

变量与地址

变量给谁用的?
变量是对某一块空间的抽象命名。
变量名就是你抽象出来的某块空间的别名。
指针就是地址。指向某个地址。

指针与指针变量

指针是指向某块地址。指针(地址)是常量。
指针变量是可以发生变化的。

指针与指针变量的举例

#include <stdio.h>

int main()
{
   
    int i = 1;
    int *p = &i;
    
    printf("i = %d  \n", i);
    printf("&i = %p \n", &i);
    printf(" p = %p \n", p);
    printf("&p = %p \n", &p);
    printf("*p = %d \n", *p);

    // 为什么不用char* p = &i;
    
    //TYPE  NAME = VALUE
    //int*  p    = &i;
    //int   i    = 1;

}
直接访问间接访问

在这里插入图片描述

占内存空间

都是8字节,linux 64 位中。

空指针 野指针 空类型

int * i= NULL;

指针运算

两个指针同时指向一个数组。++ 、–、比较、关系、&、*

指针与一维数组

数组名和 指针的区别?
a是数组名字是一个表示地址的常量。
指针是一个变量。
a++;
p++;
#include <stdio.h>

int main()
{
    int a[3] = {1,2,3};
    int *p = a;

    int i;
    for(i = 0;i < sizeof(a)/sizeof(*a); i++) {
        printf("%d %d %d %d \n",a[i],*(a+i),p[i],*(p+i)); // a[i]
        printf("%p %p %p %p \n",a+i, &a[i],p+i, p+i); // &a[i]
    }
    printf("\n");

}

这里代码体现什么是指针常量什么是指针变量?

#include <stdio.h>

int main()
{
    int a[3];
    int i;
    int *p = a;

    for(i = 0;i < sizeof(a)/sizeof(*a); i++) {
        printf("%p -> %d\n",&a[i],a[i]);
    }

    for(i = 0;i <sizeof(a)/sizeof(*a); i++) {
        scanf("%d",p++);
    }
    //p = a;
    for(i = 0;i < sizeof(a)/sizeof(*a); i++,p++) {
        printf("%p -> %d\n",p,*p);
    }

    printf("\n");

}

指针与二维数组

在这里插入图片描述

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

int main()
{
   
    int a[2][3] = {
   1,2,3,4,5,9};
    int i,j;
    int *p;
//(W)    p = a; 
    //wall等号右边a是在行间跳转的指针
    // 等号左边是列间跳转的指针
    p = *(a+0);
    //p = &a[0][0];//*(a+0),*a;

    printf("%p->%p \n", a, a + 1);
    // printf("%p -> %d \n\n",p,*p);
    
   

    // for(i = 0; i < 6; i++,p++) {
   
    //     printf("%d ",*p);
    // }
    // printf("\n");

    for(i = 0;i < 2; i++) {
   
        for(j = 0; j < 3; j++) {
   
            printf("%p->%d\n",&a[i][j],a[i][j]);
            printf("%p->%d\n",*(a+i)+j,*(*(a+i)+j));
            //printf("%p->%d\n",a[i]+j,*(*(a+i)+j));
            //printf("%d ",a[i][j]);
        }
        printf("\n");
    }
    exit(0);
}

指针与字符数组

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

// 字符指针和字符数组之间的使用


// 
// 练习 定义数组后定义指针 后面操作都用指针实现

int main()
{
   

#if 0
    char* str = "hello"; // "hello" 串常量
    printf("%d %d \n",sizeof(str),strlen(str));// 8 5
    //strcpy(str,"world"); //err 为什么不可以?区分字符指针和字符数组的区别  :企图用"world" 覆盖串常量 
    str = "world";
    puts(str);
#endif 


#if 0
    char str[] = "hello";
    printf("%d %d \n",sizeof(str),strlen(str));// 6 5

// (F) str = "hhhh"; // 数组名是一个地址常量怎么可能放到等号左边???
    strcpy</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值