#include <stdio.h>
void main()
{
int *p = NULL;
printf("sizeof(p) = %d?8\n", sizeof(p)); //内存地址,8bytes
printf("sizeof(*p) = %d?4\n", sizeof(*p));
int a[100];
printf("sizeof(a)=%d?400\n", sizeof(a));
printf("sizeof(a[100])=%d?4\n", sizeof(a[100]));
printf("sizeof(&a)=%d?8\n", sizeof(&a));
printf("sizeof(&a[0])=%d?8\n", sizeof(&a[0]));
int b[100];
void fun(int b[100])
{
printf("sizeof(b))=%d\n?8", sizeof(b));
return;
}
}指针即为地址,指针几个字节跟语言无关,而是跟系统的寻址能力有关。
编译器:16位地址,指针2个字节,32位4个字节,64位8个字节。
#include<stdio.h>
void main()
{
unsigned int a = 6;
int b = -10;if((a+b) < 0)
{
printf("<0 a+b=%d\n", (a+b));
return;
}printf("err %d\n", (a+b)); //走到这里
return;
}无符号数与有符号数做加法运算,先将有符号数转化为无符号数,然后做运算
-10以二进制补码形式存储
计算机中的加法运算是通过加数补码相加实现的。
printf("%d\n", a + b)中,由于%d的作用,使a+b以有符号十进制的形式输出,此时,最高位的1为符号位,减一取反得到其原码
printf("%u\n", a + b)中,由于%u的作用,使a+b以无符号十进制的形式输出,此时,最高位的1并非符号位,其表示数值大小,不用减一取反,按照所占字节,来转成十进制。
c++调用c的函数
C++代码。以C方式的调用,g++编译器无法通过编译。
解决方案一:
若calc中代码量很小,或代码是自己写的可以直接利用c++兼容c的特性,把calc.c改成calc.cpp。即可编译。解决方案二:
在calc.h中的每个函数最前面添加:extern "C"{ }