2026/2/20 17:31:41
网站建设
项目流程
浅谈马云电子商务网站建设,自己做网站做那种类型,做农村电商需投入多少,外贸网站做流量内存内存很大#xff0c;里面有很多数据。怎么知道哪些数据在哪里放着。地址。指针就是用来存储地址的特殊变量。指针变量地址。指针变量int a 10;//普通的局部变量a在栈区存放int* p1 a; //是取地址符号//p的类型取决于a的类型。a的类型*#xff0c;就可以定义指…内存内存很大里面有很多数据。怎么知道哪些数据在哪里放着。地址。指针就是用来存储地址的特殊变量。指针变量地址。指针变量int a 10;//普通的局部变量a在栈区存放int*p1 a;//是取地址符号//p的类型取决于a的类型。a的类型*就可以定义指针变量printf(%p\n,p1);//%p就是指针的占位符//怎么通过指针变量去访问a的值新语法printf(%d\n,*p1);//间接访问/解引用。嘛这个输出的就是a啦。*p1 99;*p1作为等式的左值什么意思把a里面原来的10变成了99偷家了吧就是。指针类型与访问类型char short都可以 跟int差不多的访问就是解引用上面也写过的访问指针变量所指向内存的值修改指针变量所指向内存的值都讲过啦。*指针变量就可以啦。记得占位符用原来变量的是int就用d是char就用c不要用p了。当前这个指针能访问几个字节取决于变量的类型。问题给内存进行编址的时候是怎么编址的以字节为单位进行编址就跟一户编一号一样的指针变量的大小不管什么类型的指针大小都是一样的因为地址是统一编号的都是32个二进制位。32位系统下为什么看到的是八位十六进制显示而已。在32位系统下一个4字节的指针用十六进制表示就是一个八位的十六进制数。两个十六进制位正好一个字节。64位系统不一样都变成两倍。指针的运算指针 - 整数指针 - 指针指针的关系运算指针 - 整数int main(){int arr[10] {1,2,3,4,5,6,7,8,9,10};int len sizeof(arr)/sizeof(arr[0]);int* p arr[0];printf(%p\n,p);printf(%d\n,*p);printf(%p\n,p1);printf(%d\n,*(p1));return 0;}如果此时想要指针由0下标的数指向1下标的数应该如何操作呢。让p1就可以。p没变。p1是一个地址这里的加1相当于加了四个字节从数组下标为0的位置加到了数组下标为1的位置。用%p输出的是地址。如果想输出数的话用解引用就可以了。指针 - 指针int main(){int arr[10] {1,2,3,4,5,6,7,8,9,10};int* p1 arr[1];int* p2 arr[4];printf(%d\n,p2 - p1);return 0;}结果是3刚好是两个数在数组里中间隔的数的个数。指针减指针不是随便减的。前提两个指针必须指向同一块内存。比如不是同一个数组就减不了。指针的关系运算int main(){int arr[10] {1,2,3,4,5,6,7,8,9,10};int len sizeof(arr)/sizeof(arr[0]);int* p1 arr[0];int* p2 p1 len;while(p1 p2){printf(%d ,*p1);p1; //p1加的不是数值是位置。你要把这个弯绕过来}return 0;}len现在是10p2现在是p1加10。有点越界了所以用小于号就好啦不用小于等于的意思黄色的可以改成int* p2 arr len;int* p2 arr[0] len;这里的数组名的含义就是数组首元的地址注意数组名代表 数组首元素的地址但是有两个地方除外1.定义数组的时候sizeof(arr)表示整个数组的字节大小2.他说后续讲int类型的指针加1是加4个字节short类型的指针加1是加2个字节char类型的指针加1是加1个字节总之就是跟着类型来的可以理解成指针加1就是加一个单位我觉得//什么时候是定义数组又是什么时候不算定义数组呢//对比在自定义函数里的len和在函数外的lenvoid func(int arr[]){// 8 / 4int len sizeof(arr)/sizeof(arr[0]);printf(func :: len %d\n,len);}int main(){int arr[10] {1,2,3,4,5,6,7,8,9,10};int len sizeof(arr)/sizeof(arr[0]);printf(len %d\n,len);func(arr);}输出的结果是len 10func :: len 2原因c语言中数组作为函数参数时会被隐式转换为指向数组首元素的指针int arr[]等价于int* arrsizeof(arr)这时候计算的是指针变量的字节大小64位系统下占8字节32位系统下占4字节sizeof(arr[0])依然是int类型的4个字节补交换的函数之前函数那节失败的void swap(int x,int y)//错的{int tmp;tmp x;x y;y tmp;}int main(){int a 10;int b 20;printf(%d %d\n,a,b);swap(a,b); //错的printf(%d %d\n,a,b);return 0;}此时的形参只是拿到了实参的值形参只是实参的一份拷贝。拿到地址才是实打实的换。void swap(int* px,int* py){int tmp;tmp *px;*px *py;*py tmp;//不要忘记写*啊。不能直接换指针的地址变量的换的是里面装的东西}int main(){int a 10;int b 20;printf(%d %d\n,a,b);swap(a,b);printf(%d %d\n,a,b);return 0;}什么时候用指针什么按值传递如果要改变实参本身的值最好传地址。不改变就按值传递就好了吧。。