c语言中%s和%d的区别

 1 /*************************************************************************
 2     > File Name: ptr_both.c
 3     > Author: Mr.Yang
 4     > Purpose:思考指针指向字符串和指向整型的区别
 5     > Created Time: 2017年06月03日 星期六 17时37分17秒
 6  ************************************************************************/
 7
 8 #include <stdio.h>
 9 #include <stdlib.h>
10 #include <string.h>
11
12 int main(void)
13 {
14         /*指针指向字符串演示*/
15         char *s1 = "hello";
16         char *p1 = strchr(s1,‘l‘);//返回首次出现该字符串的地址
17         printf("%s\n",p1);//%s它要求参数是一个指针!!!   puts函数也要求它的参数是一个指针,而不能是数值!!!
18
19         /*指针指向整型演示*/
20         int s2[] = {1,2,3,4};
21         int *p2 = s2;
22         printf("%d\n",*p2);//%d它要求参数是一个值!!!
23
24         return 0;
25 }

这也就解释了为什么printf同要输出值,字符串和整型需要不同类型参数!!!

怎么从c语言的核心理解这两个区别,也就是怎么从字符串、整形的存储原理来理解???

时间: 2024-09-30 10:44:48

c语言中%s和%d的区别的相关文章

R语言中 fitted()和predict()的区别

fitted是拟合值,predict是预测值.模型是基于给定样本的值建立的,在这些给定样本上做预测就是拟合.在新样本上做预测就是预测. 你可以找一组数据试试,结果如何.fit<-lm(weight~height,data=women)fitted(fit) predict(fit,newdata=data.frame(height=90))##将90代入看结果如何这是R in action中的例子 R语言中 fitted()和predict()的区别,布布扣,bubuko.com R语言中 fi

Java语言中extend和implement的区别

Java语言并不支持多重继承,而只能继承一个类,不过我们可以使用implements来实现多个接口. extends继承的父类:不能声明为final或者定义为abstract: implements实现接口interface,用逗号分开就好: 如:class A extends B implements C, D, E interface的引入是为了部分地提供多继承的功能. 在interface中只需声明方法头,而将方法体留给实现的class来做. 这些实现的class的实例完全可以当作inte

C语言中sizeof与strlen 的区别

sizeof与strlen是有着本质的区别,sizeof是求数据类型所占的空间大小,而strlen是求字符串的长度,字符串以/0结尾.总的来说sizeof把'\0'也给数上了,而strlen遇到'\0'就停止计数了.区别如下:(1) sizeof是一个C语言中的一个单目运算符,而strlen是一个函数,用来计算字符串的长度.(2)sizeof求的是数据类型所占空间的大小,而strlen是求字符串的长度实例1:printf("char=%d/n",sizeof(char)); //1pr

C语言中void *指针与空指针区别

void* 这不叫空指针,这叫无确切类型指针.这个指针指向一块内存,却没有告诉程序该用何种方式来解释这片内存.所以这种类型的指针不能直接进行取内容的操作.必须先转成别的类型的指针才可以把内容解释出来. 还有'\0',这也不是空指针所指的内容. '\0'是表示一个字符串的结尾而已,并不是NULL的意思. 真正的空指针是说,这个指针没有指向一块有意义的内存,比如说:char* k;这里这个k就叫空指针.我们并未让它指向任意地点.又或者char* k = NULL;这里这个k也叫空指针,因为它指向NU

C语言中sizeof与strlen的区别

1.sizeof sizeof为编译时期被替换,不会等到程序运行再来判断,所以sizeof返回的是数组的总字节数 1 #include<stdio.h> 2 3 int main() 4 { 5 char a[10]={'a','b'}; 6 7 printf("%d\n",sizeof(a));//10 8 } 2.strlen函数包含在string.h头文件中,该函数返回的是数组的长度,数组中有几个元素就返回几 1 #include<stdio.h> 2 #

C 语言中typedef和define的区别

typedef vs #define #define 是 C 指令,用于为各种数据类型定义别名,与 typedef 类似,但是它们有以下几点不同: typedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名,也能为数值定义别名,比如您可以定义 1 为 ONE. typedef 是由编译器执行解释的,#define 语句是由预编译器进行处理的. 下面是 #define 的最简单的用法: 实例 #include <stdio.h> #define TRUE 1 #define

Go语言中new()和make()的区别

1. Go语言中的值类型和引用类型 值类型:int,float,bool,string,struct和数组 (数组要特别注意,别搞混了) 变量直接存储值,分配栈区的内存空间,这些变量所占据的空间在函数被调用完后会自动释放. 引用类型:slice,map,chan和值类型对应的指针 变量存储的是一个地址(或者理解为指针),指针指向内存中真正存储数据的首地址.内存通常在堆上分配,通过GC回收. 2. new() vs make() 对值类型和引用类型了解之后,再来理解new()和make()就不难了

在Swift语言中,关于Any,AnyObject,AnyClass的区别与联系

在Swift语言中,协议定义类或结构体应该遵守的变量和方法集合,如下所示,这个一个标准的协议的声明: protocol NSObjectProtocol { func isEqual(object: AnyObject?) -> Bool var hash: Int { get } var superclass: AnyClass? { get } func `self`() -> Self! func isProxy() -> Bool func isKindOfClass(aClas

C/C++语言中NULL、&#39;\0’和0的区别

注:本文参考了http://blog.csdn.net/mylinx/article/details/6873253及书籍<征服C指针>([日]前桥和弥著). NULL.'\0'和0的值是一样的,都是0,不过它们的表现形式不一样: 1. NULL: 即空指针,不过在C和C++中并不一样.在VS 2013的库文件string.h中可以看到如果定义. 1 /* Define NULL pointer value */ 2 #ifndef NULL 3 #ifdef __cplusplus 4 #d