自从学习了网易云课堂翁凯老师的C语言课程之后,我觉得自己对编程有了更深层次的理解,无论是在编程的思路上还是思考问题解决问题的方式上。我觉得学计算机最重要的不是掌握了多少知识,每一个技术大牛肯定是有宽广的知识面以及扎实的技术功底的,但是他们的优势是不断的学习和积累,不停地找到新的学习方法,掌握解决问题的能力,日积月累之后渐渐地进化成一个完全体。
这是我在MOOC网课学习C时不解的一个问题,虽然问题很小,但是也有热心的大神替我解答了。
#include<stdio.h>
#include<string.h>
int main(void){
char *s="hello";
char *p = strchr(s,'l');
printf("%s\n",p); ------------------1
int a[] ={0,1,2,3,4};
int *b =a;
printf("%d\n",*b); ------------------2
return 0;
}
代码如上,*p指向字符串,*b指向整型,为什么1处*p输出加了*以后输出报错,2处*b不加*以后输出的是a的地址,整型和字符串指针输出结果为什么有这样的区别呢?
所以其实是因为%d和%s传的参数的区别,printf("%s\n",p); ------------------1
printf %s 他要求的参数是一个指针 而你*p 传了值 他就把值当作了指针 使用了一个无效的指针 当然出错了
printf("%d\n",*b); ------------------2
b即是a[]的指针 也是a[]中第一个值的指针
原来是因为%s 他要求的参数是一个指针,这样就解释的通了,而%d要求的参数就是一个值。