11.指针
1.const int * pOne; //指向整形常量 的指针,它指向的值不能修改
2.int * const pTwo; //指向整形的常量指针 ,它不能在指向别的变量,但指向(变量)的值可以修改。
指针并不一定总是地址
由于字存储可能大于实际存储变量的长度,那么就需要采用地址+偏移量的表示方法。在intel处理器中,可以采用near的16位偏移量,或far32位偏移量对,偏移量不是真正的地址,cpu需将它与特殊寄存器中段的值联合起来。
12.指针和数组
指针也可以比较大小,当两个指针指向同一数组时。
在标准C中,即使数组a[size]不存在,但对他的取地址仍然合法。
/* 处理一行 */
int a[10][10];
int* p;
for(p = a[0]; p < a[0] + COL; p++) *p = 0; /* 处理一列 */ int (*p1)[COL]; for(p1 = a; p < a + COL; p++) (*p)[i] = 0;
数值型形参和指针型形参是可以互换的,但是对于变量来说却完全不同,比如sizeof。
13.字符串
八进制的字符转义序列最到3个或读到非8进制的数。
/* 字符串写不下了 */
//缺点是不能缩进了。
printf("asdadas. \ adasd\n");
//比较好
printf("asdadas."
"adasd\n");
//骚操作
char digitToHex(int digit)
{
return "0123456789ABCDEF"[digit];
}
#define STR_LEN 80
char a[STR_LEN + 1];
//编译一旦结束,c的长度就结束了,并不是可变的
char c[] = "adasd";
//输出可以用
puts(const char* );
gets();
scanf("%ns", );
//当然fgets会更安全些,scanf要格式化%ns,控制一下长度