一个图是代码,一个图是运行结果。
好奇为什么有长有短,是它们存放的位置不同吗?谁能解释一下。
第一个是打印a的值,以地址的方式打印,由于a没有给初始值,该值是随机的!
第二个打印的a的地址,即系统分配给a的地址,以地址方式打印!
第三个打a的下一个地址,由于a是四个字节,下一个地址偏移四个字节!
第一个打印的是 a 的值, 第二个是 a 的地址, 第三个是 a 的地址 + 1 个步长,这里是 4字节,c+4 = 0 ,这是个 32 位编译器
第一个输出的是a的值,后2个输出的是地址
核心:从数据的第一个元素开始,依次比较,直到找到目标数据或查找失败。
1.从表中的第一个元素开始,依次与关键字比较。
2.若某个元素匹配关键字,则 查找成功。
3.若查找到最后一个元素还未匹配关键字,则 查找失败。
顺序查找对表中元素的排序无要求,这些元素在表中可以任意排序,这使得顺序查找的适应性很高。顺序查找的实现很简单,其示例代码如下:
#include "stdio.h"
void main(){
int a[10],num,i,flag; /*变量定义*/
printf("Please input numbers: ");
for(i=0;i<=9;i++){
scanf("%d",&a[i]); /*接收输入的数组*/
}
printf("Please finding numbers: ");
scanf("%d", &num); /*接收关键字*/
for(i=0;i<=9;i++){
if(a[i]=num){ //查找到所需的元素,跳出循环
flag=1;
break;
}
}
if(i==10){
flag=0;
}
if(flag){
printf("The numbers find!\n");
}
else{
printf("The numbers No find!\n");
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载
问题解答:
C语言地址输出格式的差异原因是因为在不同的操作系统下或编译器下,存储单元长度可能会不同,有些操作系统下会将指针类型设为4字节,有些会设置为8字节,所以输出格式的长度会有所不同。此外,不同的编译器也可能会有不同的对齐方式以及编译器选项,也会导致地址输出格式的差异。
要解决这个问题,可以使用类型转换来规范输出的长度,比如使用 %p 或 %lx 格式化输出指针地址,还可以使用 intptr_t 或 uintptr_t 来兼容不同的系统和编译器,并避免数据类型长度不一致的问题。
示例代码:
#include <stdio.h>
#include <stdint.h>
int main() {
int x = 1;
int* p = &x;
printf("p=%p\n", (void*)p); // %p 格式化输出指针地址
printf("p=%lx\n", (uintptr_t)p); // %lx 格式化输出指针地址的无符号整数值
return 0;
}
注意:为了防止指针类型被隐式转换为其它类型,建议在输出指针时先将其转为 void* 类型。