c语言指针和数组的转换,C语言中怎么交换指针数组里的值

1,C语言中怎么交换指针数组里的值大概的过程:char *temp;for(){ temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}就是这样,for循环自己完善一下就好了 。【c语言指针和数组的转换,C语言中怎么交换指针数组里的值】
2,C语言 如何实现一结构数组指针的内容交换#include <stdio.h>#include <stdlib.h>typedef struct MyStruct{int m, n;}mystruct;int main(){//初始化mystruct *a = (mystruct *)malloc(sizeof(mystruct));mystruct *b = (mystruct *)malloc(sizeof(mystruct));mystruct t;a->m = 1, a->n = 5;b->m = 10, b->n = 50;//交换t = *a;*a = *b;*b = t;//显示结果printf("%d,%d\n", a->m, a->n);printf("%d,%d\n", b->m, b->n);system("pause");return 0;}
3 , C 数组和指针的相互转化程序错误比较多 ,更新了下:#include #include typedef struct { int a; int b; int c; int d; } alex_t ; void test(alex_t** c); int main() { alex_t* b[2] = ; test(b); return 0; } void test(alex_t** c) { alex_t* cat = NULL; cat = (alex_t*)malloc(8); memset(cat, 0, 8); alex_t* dog = NULL; dog = (alex_t*)malloc(8); memset(dog, 1, 8); c[0] = cat; c[1] = dog; *c = cat; *(c + 1) = dog; } 你说的1, 2 都语法错误了 . &cat, & dog, 由于cat, dog 类型是alex_t* ,这是二级指针了. *(c + 8) = &dog; 这句c+ 8 内存越界了, 且左边是alex_t* 类型右边是alex_t** 类型.因为二级指针是指向指针的指针, 也就是说二级指针必须指向一个一级指针, 而这个一级指针存放的是一个内存地址相信楼主知道一维数组可以看成是一级指针但是二维数组却不能看成是二级指针就以a[2][3]举例a[2][3]其实就是两个维度为3的一维数组合并起来的二维数组, 也可以看成是一个一级数组指针所以并不能用二级指针直接操作二维数组推荐使用#include <iostream>void main() int a[2][3]; int (*p)[3] = a;}写法1:c[0]=cat;// 可以么?----可以(注意:不是&cat)c[2]=dog; // 可以么?----可以或者写法2:*c=cat;//可以么?------可以*(c+1)=dog; //对的么?--可以*(c+8)=dog; ?-----不可以写法1和写法2没有实质的区别,内部都是按指针处理的,即使你写成2那样的,编译时会自动处理成1那种*(c+8)是很严重的错误,会导致程序的崩溃!注意:指针+1实质上在内存中是加了指针所指的内存大小那么长,不要自作聪明给+8struct alex_t *b[2]=这里定义了一个数组 , 数组有两个成员 , 每个都是指向struct alex_t的指针 。c[0]代表一个指针,&cat代表指向指针的指针 。所以c[0]=&cat;// 不可以c[2]=&dog; // 不可以,且c[1]为数组的第二个值,c[2]不存在 。*c代表一个指针,&cat代表指向指针的指针 。所以*c=&cat;//不可以*(c+1)=&dog//不可以你只要把&cat和&dog改为cat和dog就正确了 。*(c+1)等同于c[1],写法一与写法二是一样的 。至于*(c+1)=&dog; 还是该*(c+8)=&dog; ?这里指针+1表示指针移动sizeof(alex_t)个字节 。指针指向的类型是什么,就移动此类型所占用的字节数 。

    推荐阅读