c学习2

指针有类型  但是地址没有类型

因为他们在读取的时候在栈中有相应的位置。

 

int *p=NULL

这时候不能直接读取*p的值,因为这是系统的地址

 

//多级指针

不能直接通过定义变量的形式存放指针然后获取其中的数值,因为*必须作用于指针类型

void main(){

    int i=23;

    int *p=&i;

    int **q=&p; //这时候q存储的就是p的地址值,然后*q获取p存储的i的地址值,**q就获取了i的数值

    printf("%d\n",**q);//这样才能获取i的值

 

}

 

下面的方法就不行了

void main(){

    int i=21;

    int *p=&i;

    int *q=&p;

    printf("%d\n",**q);//这样会报错,因为*q没有定义为指针,*只能作用在定义为指针的变量上,这样**q就不正确了。

}

 

 

数组的变量名 就是数组的首地址也就是第一个元素的地址

array  &array  &array[0]  都是相同的地址

指针的加法

p++   这样指针p向前移动4个字节

指针的运算 一般在数组遍历的时候才有意义,

 

打断点后,点击调试 --》窗口--》内存  然后通过打印的地址查询

debug  f11下一步

 

 

函数指针

函数的返回值类型  ,函数指针的名称,函数的参数列表

void(* fun_p)()=msg

fun_p();//就能调用msg函数  这样的能够把具体的函数抽象出来一定的结构的函数,并且调用。相当于函数的泛型,这样就能将函数当做参数传递过去。

 

int add(int a,int b){

    return a+b;

}

 

int minus(int a,int b){

    return a-b;

}

 

int handle(int (* func)(int a,int b),int a,int b){

    return func(a,b);

}

 

void main(){

    printf("%d\n",handle(add,123,3));这里相当于泛型的使用

}

 

 

点击反汇编  在内存中查看存放的数据

 

能够将函数作为参数传递给某个函数作为参数

 

函数的名称 就是函数的地址

类似Java中的将对象传递过去,其实也是利用的地址相同的原理

 

文档查询

 

随机数

srand()需要设置seed ,一般使用当前的时间srand((unsigned)time(NULL))  注意引入头文件 #include <time.h>  

然后在用rand()生成相应的随机数。

void main(){

    intids[10];

    //这样保证随机数的是变化的,否则会一直用最初的产生的随机数

    srand((unsigned)time(NULL));

    for (int i = 0; i < 10; i++){

        ids[i] =rand() % 100;

        printf("%d\n", ids[i]);

 

    }

}

 

 

 

存储指针的时候,使用int 或者float并没有区别,但是如果使用*指针 取出当前的值的时候,就会因为类型不同出现错误。

因此定义指针一定要和定义的指针岁所对应的数据类型相匹配。

 

void main(){

    double *q;//这是声明q是存放指针

    double i=23.3;

    q=&i; //这时候q就是存放指针的变量,

    printf("%#x,%lf",q,*q);

}

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值