CC++语言要点记录

xiaoxiao2021-02-28  72

1. sizeof

const char * st = "1234567890"; sizeof(st); //4 strlen(st); //10

当把sizeof用于字符指针时,得到的是指针大小(4),而不是字符串的大小。这是应该用strlen。

当用字符数组时,注意sizeof会包括结尾的\0。例如:

char st[] = "1234567890"; sizeof(st); //11 strlen(st); //10

2. bool

对bool调用sizeof,结果是1。

3. system调用

当用system调用shell,exit 1,则返回值在C程序里读取是256. 例如:

int rtn = system("exit 1"); int rtn2 = system("exit 2"); printf("%d, %d\n", rtn, rtn2); //256, 512

可以将其右移8位,获得原来的返回值:

rtn = (rtn >> 8);

4. 转换timestamp

#include <time.h> long inputtime = 1499790377L; struct tm res; localtime_r(&inputtime, &res); printf("%d-%d-%d %d:%d:%d\n", res.tm_year+1900,res.tm_mon+1,res.tm_mday,res.tm_hour,res.tm_min,res.tm_sec);

5. 数组的地址操作(32位系统)

#include<stdio.h> int main() { int a[10]; printf("%x\n%x\n%x\n%x\n%x\n",a, &a+1, a+sizeof(int), (int*)&a + 1, (int*)((char*)&a+sizeof(int))); return 0; } bffa8e90 bffa8eb8 bffa8ea0 bffa8e94 bffa8e94

"a"表示数组的地址;

&a+1,a的类型是10个元素的int数组,size是40。+1表示下一个"10元素int数组"的地址,所以+40。

a+4是第4个元素的地址,所以+16。

转成int*后,a的类型是int指针,+1表示下一个这种类型的地址,所以+4。

转成char*后,+4就是原地址+4。

转载请注明原文地址: https://www.6miu.com/read-71846.html

最新回复(0)