美文网首页
C语言学习感悟(1)

C语言学习感悟(1)

作者: 一个冬季 | 来源:发表于2018-05-22 22:50 被阅读9次

    今天学习下,为什么指针变量也可以存储字符串,难道不是只存储指针么?

    #include <stdio.h>
    #include <stdlib.h>
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    
    void main(int argc, char *argv[]) {
        int i=3,j=5;
        int *p,*q;
        p = &i,q=&j;
        
        float a=5.8,b=7.9;
        float *c,*d;
        c = &a,d = &b;
        
        char m='I',n='l';
        char *x,*y;
        x=&m,y=&n;
        printf("i=%d,j=%d\n",*p,*q);
        printf("a=%f,b=%f\n",*c,*d);
        printf("m=%c,n=%c\n",*x,*y);
    }
    
    感悟.png

    代码里面int *p, *q表示的是指针变量,就类似java里面的int a一样。p,q里面保存的都是指针的地址形如0x1111这样的地址。如果我们需要打印数据如这样printf("i=%d,j=%d\n", *p, *q); *p, *q我们可以理解为取地址所指向的内容。
    如果你的指针变量是这样的

        char buf[]="fadfdsew";
        char *p=buf;
        p="eqewq"; 
        printf("%d\n",p);
        printf("%s",p);
    
    指针变量被赋值字符串.png

    像上面这样我的指针变量改变了,变成eqewq。如何理解与我前面所写的 p=0x1111 这样的呢?

        int i=3
        int *p;
        p = &i
    

    大家看到没,我是取i的地址放到p里面,如果我们printf("%d",p),会打印0x1111 ,下面这个我是把"eqewq"放到指针变量里面,它在这里面做了什么工作呢?一共有3件事:
    1.申请了空间(在常量区),存放了字符串
    2.在字符串尾加上了'/0'
    3.返回地址
    指针获取的是字符串首字母e的首地址,当用%s输出时,在输出前一个字符的同时指针会自动跳到下个字符的地址处,直到遇到'/0'停止,所以%s可以输出一个字符串.

        char buf[]="fadfdsew";
        char *p=buf;
        p="eqewq"; 
    

    相关文章

      网友评论

          本文标题:C语言学习感悟(1)

          本文链接:https://www.haomeiwen.com/subject/cnfljftx.html