//64位系统可以生产32位的程序也能生成64位的程序。
//x86 32位程序
//x64 64位程序
int main(){
int num = 10;
int* p = #
//32位系统下,一个指针是4个字节
//64位系统下,一个指针8个字节
//每个系统具体是占几个字节,其实是不确定的;32与64位系统中int占4个字节
//
printf("%d\n",sizeof( p));
printf("char %d\n", sizeof(char));
printf("short %d\n", sizeof(short));
printf("int %d\n", sizeof(int));
printf("long %d\n", sizeof(long));
system("pause");
return 0;
}
//一个指针变量提供两方面的信息
//1.某个内存的地址是哪
//2.这个内存的空间大小是多大
int main(){
int num = 10;
int* p = #
printf("%d\n", sizeof(p));
double num2 = 10.0;
double* p2 = &num2;
printf("%d\n", sizeof(p2));
//p2 = p; //不同的类型的指针不能不应该相互赋值
//void* 和空指针是完全不相干的两回事
//void* 表示一个指针只知道地址但不知道房间大小是多大。
void* p3 = p;//瘸了,所以任何类型的指针都能赋值给void*
p3 = p2;//瘸了,所以任何类型的指针都能赋值给void*
//void*不能解引用
void* p4 = p;
printf("%d\n", *p4);//会有波浪线报错
system("pause");
return 0;
}
//1.指针 + - 整数
//指针+1意味着,地址往后(变大)跳过一个元素
char* p = NULL;
printf("%p\n", p+1);
short* p2 = NULL;
printf("%p\n", p2 + 1);
int* p3 = NULL;
printf("%p\n", p3 + 1);
//指针减一意味着,地址向前跳过一个元素
char* p = 0x100;
printf("%p\n", p -1);
short* p2 = 0x100;
printf("%p\n", p2 - 1);
int* p3 = 0x100;
printf("%p\n", p3 - 1);
//2.指针-指针
//两指针之间隔了几个元素。
//0x10 -> 16, 4个int刚好16个字节
int* p1 = 0x100;
int* p2 = 0x110;
printf("%d\n", p2 - p1);
char* p3 = 0x100; //强制类型转换 (char*)0x100
char* p4 = 0x110;
printf("%d\n", p4 - p3);
指针相减,大部分情况下是没有意义的。
只有当两个指针指向同意连续的内存空间的时候,相减才有意义
int arr[] = { 9, 5, 2, 7 };
int* p1 = &arr[0];
int* p2 = &arr[2];
printf("%p\n", p1);
printf("%p\n", p2);
printf("%d\n", p2-p1);
//3.指针的关系运算。
// < > <= >= == !=
//指针比较比较的是指针变量中存储的地址是否相同
int num1 = 10;
int* p1 = &num1;
int num2 = 10;
int* p2 = &num2;
if (p1 == p2){
printf("hehe\n");
}
else
{
printf("haha\n");
}
//为啥不能直接用==比较字符串?因为c语言中字符串使用字符数组来表示的,而单独拿出数组名相当于首
//元素的地址,用==比较就相当于比较两个指针变量是否相等,比较的依据是指针变量中保存的地址
char str1[] = "hehe";
char str2[] = "hehe";
if (str1 == str2){
printf("hehe\n");
}
else{
printf("haha\n");
}
//strcmp 其实能比较两个字符串的大小
if (strcmp(str1, str2) == 0){
printf("hehe\n");
}
else{
printf("haha\n");
}
== 和 != 是最有用的指针比较
int arr[] = { 9, 5, 2, 7 };
int* p1 = &arr[0];
int* p2 = &arr[2];//等价于 int* p2=arr+2
int* p3 = arr + 2;
if (p2==p3){
printf("hehe\n");
}
else{
printf("haha\n");
}
system("pause");
return 0;
}