标签:例题 函数 分支 can 影响 程序 ati 二级指针 bit
(*p)++:是数值会要变化。
口诀:取当前值,然后再使数值增加 1。
例题:int *p,a[]={1,3,5,7,9};
p=a;
请问*p++和(*p)++的数值分别为多少?
*p++:这个本身的数值为1。由于是地址会增加一,所以指针指向数值3了。
(*p)++:这个本身的数值为1。由于++表示数值会增加,指针不移动,但数值1由于自加了一次变成了2。
**q:二级指针:存放一级指针的地址。
常考题目:int x=7;int*p=&x,**q=p;
问你:*p 为多少?*q为多少?**q为多少?
*p=7,*q=p,**q=7
再问:**q=&x 的写法可以吗?不可以,二级指针只能存放一级指针的地址。
char *ps = "HELLO";
sizeof(ps) = 4 //只是指针的大小,即 地址(整数类型占4个字节)
sizeof(*ps) = 1 //*ps+0代表数组第一个元素的大小,即ps[0]
char as[8];
sizeof(as) = 8 //因为as的类型为 char [8],这个大小的确是8
sizeof(*as) = 1 //*as+0代表数组第一个元素的大小,即as[0]
char aa[8][9];
sizeof((char *)aa) = 4 //还是 char *
char arr[100] = "HELLO";
sizeof(arr) = 100 //和赋什么值没什么关系,关键是"类型"是什么
int func(char p[100]) {
sizeof(p) = 4;
/*C/C++中不能传数组,只能传指针,所以任何数组都会隐式转成指针形式进行操作。*/
}
两种重要的数组长度:
char a[]={‘a’,’b’,’c’}; 数组长度为3,字符串长度不定(因为没有‘\0‘结束符)。sizeof(a)为3。
char a[5]={ ‘a’,’b’,’c’}; 数组长度为5,字符串长度3。sizeof(a)为5。
char a[]={‘a‘,‘b‘,‘c‘}; 这是一个字符数组,占3个字节。
char a[]="abc" 则不同,它是一个字符串,最后还有一个‘\0‘结束符,占4个字节。
指针考点:
char ch[]=”iamhandsome”;
char *p=ch;
问你:*(p+2) 和 *p+2 的结果是多少?
*(p+2) = ‘m’ *p+2 = ‘k’
解析:
第一个是地址+2,所以取m;
第二个则是数值+2,即 ASCII码值+2,ijk,所以取k。
逗号表达式:
优先级别最低。表达式的数值逗号最右边的那个表达式的数值。
(2,3,4)的表达式的数值就是4。
z =(2,3,4)(整个是赋值表达式),这个时候z的值为4。
z = 2,3,4 (整个是逗号表达式),这个时候z的值为2。
问题:#define f(x)(x*x) 和 #define f(x) x*x 之间的差别。
define是C语言中的宏定义关键字,其定义格式如下:
#define [MacroName] [MacroValue]宏定义分为普通宏定义和带参数的宏定义
普通宏定义:#define PI (3.1415926)
带参数的宏定义 (宏函数):#define max(a,b) ((a)>(b)? (a),(b))
注意:变量在宏中要用括号括起来。
因为,在C语言中define宏定义在编译时,会被展开,进行“傻瓜式”替换,也称为“字面”替换,如果没有括号有可能会产生歧义。
如:
int a,b,c,d,e;
a=1;b=2;c=6;d=4;
e=f(a+b) * f(c+d) ; //理论值e=9*100=900
#define f(x)(x*x)
替换结果为:e=(a+b*a+b)*(c+d*c+d) = 5*34=170
#define f(x) x*x
替换结果为:e=a+b*a+b*c+d*c+d=1+2+12+24+4=43
#define f(x) ((x)*(x))
替换结果为:e=( (a+b)*(a+b)*(c+d)*(c+d) )=3*3*10*10=900
这个才是我们想要的结果!
字符数据的合法形式:
‘1‘ 是字符占一个字节,"1"是字符串占两个字节(含有一个结束符号)。
‘0‘ 的 ASCII 数值表示为 48,‘a‘ 的 ASCII 数值是 97,‘A‘的 ASCII 数值是 65。
一般表示单个字符错误的形式:‘65‘ "1"
字符是可以进行算术运算的,记住:‘0‘-0=48
大写字母和小写字母转换的方法:
‘A‘+32=‘a‘ 相互之间一般是相差32。
这个32不用记,要用的时候直接‘a‘-‘A‘,就可以得出转换大小写的数值了。
字符型和整数是近亲:两个具有很大的相似之处
char a = 65 ;
printf(“%c”, a); 得到的输出结果:a
printf(“%d”, A); 得到的输出结果:65
转义字符分为一般转义字符、八进制转义字符、十六进制转义字符。
未完待续
标签:例题 函数 分支 can 影响 程序 ati 二级指针 bit
原文地址:https://www.cnblogs.com/blknemo/p/12174011.html