指针与数组

指针用于  存放内存单元地址

指针赋值

int *p;//*声明指针
int a;
int *ptr=&a;//&取地址,&作为参数传入函数的时候是引用

 指针与数组

数组名实际上是一个不能被赋值的指针(指针常量)

ptr是地址 arry是数组的首地址 所以等价于int *ptr ptr=array

int array[]={1,9,9,8,0,8,22};//七个元素
int *ptr=array;//声明指针的时候指向数组第一个元素的地址 也等价于int *ptr;ptr=array;

 2.将一个指针赋值给另一个指针

int *p1,*p2;
int i=1,j=2;
p1=&i;
p2=&j;
*p1=*p2;

可以看出*p1 *p2代表的是地址的内容  *p1=*p2  将p2地址的值(该地址存放的值比如1 2 3 45 6等)赋值给p1

3

int *p1,*p2;
int i=1,j=2;
p1=&i; p2=&j ;

*p1=*p2 ; //此时的*p1就是i *p2就是j
改变的是:p1所指向的地址中的值!
如果修改p1的地址,则应该是:p1=p2 ;

PS: *是引用地址数据运算符,其后只能跟指针变量,表示引用地址中的数据

#include <stdio.h>

int printf11(void);
int printf22(void);
int printf33(void);
//定义结构体
typedef struct 
{
    int a;
    char b[10];
    int (*printf1)(void);
    int (*printf2)(void);
    int (*printf3)(void);
    /* data */
}hanshu;
    int printf11(void)
    {
        printf("hanshu1\n");
        return 0;

    }
    int printf22(void)
    {
        printf("hanshu2\n");
        return 0;
    }
    int printf33(void)
    {
        printf("hanshu3\n");
        return 0;

    }

int main()
{
    char  c[10]="liu taozhu";
    char* f;
    f=c;
    int array[]={1,9,9,8,0,8,22};//七个元素
    int *ptr=array;//声明指针的时候指向数组第一个元素的地址 也等价于int *ptr;ptr=array;

    char d='q';
    char *p;
    p=&d;
    
    //初始化结构体
    hanshu ltz=
    {
        10,
       "ltz",
        printf11,
        printf22,
        printf33

    };
    printf("array %d\n",*ptr);
    printf(" %c\n",c[0]);
    printf(" %c\n",c[1]);
    printf(" %c\n",c[2]);
    printf(" %c\n",c[3]);
    printf(" %d\n",ltz.a);
    printf("%s\n",c);
    printf(" *p=%c\n",*p);
    printf("*f=%c\n",*f);
    printf(" d=%c\n",d);
    printf( "%s\n",ltz.b);
    ltz.printf1();
    ltz.printf2();
    ltz.printf3();
    return 0;

}

 


array 1
 l
 i
 u

 10
liu taozhua
 *p=q
*f=l
 d=q
ltz
hanshu1
hanshu2
hanshu3

printf("*f=%c\n",*f);  如果使用%s 会报错   只能%c  指针指向首地址 打印首地址的字符

但是printf("*f=%s\n",f);可以打印整串字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值