C语言学习感悟(1)

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

#include 
#include 

/* 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);
}
C语言学习感悟(1)_第1张图片
感悟.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);
C语言学习感悟(1)_第2张图片
指针变量被赋值字符串.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))