c语言指针在函数中的用法,C语言的指针是如何使用的

1,C语言的指针是如何使用的指针是指向地址的,所以你对指针修改也会影响到原地址的值,所以当你需要在函数里修改函数外的变量时可以考虑指针,当然指针还可以连接结构体里的节点之类的,后面还有跟函数有关的指针是指向地址的,所以你对指针修改也会影响到原地址的值,所以当你需要在函数里修改函数外的变量时可以考虑指针,当然指针还可以连接结构体里的节点之类的,后面还有跟函数有关的我是这样理解的:在C语言中,你需要定义变量,那么你所定义的这个变量本身你要理解两层含义:(1)变量中的值是多少?有了值我们可以直接拿变量参与运算,eg. int a=5;在计算的时候a就表示5;(2)变量存储在内存中的什么位置?变量的存储位置,就是变量的地址 , 那么这个地址可以用指针来存储,eg. int a=5, *p=&a; 在这里p就是指针变量,存储了变量a的地址,这个时候你要是用a变量的值,即可以直接用a,也可以用*p,*p是通过p这个指针(也就是a的地址),间接的找到a,在程序中*p与a是等价的 。指针可以理解为地址即指向地址的指针 , 在使用之前要明确三个问题,指针的类型,指针指向的类型,指针指向值的内存区域 。通过传递值的地址来传递值
2,求C语言中指针的用法电脑程序中,不管是什么东西,他都对应有一个地址,而指针的作用是指向这个地址 。例如int a=0;a的内容是0,但是在电脑中的内存地址就是其他,假如是2000,那么指针指向的就是这个2000的值 。继续刚才的例子int *p;p=&a;这个时候p就指向了a的地址2000 , 如果想借助p来访问a,就需要在p前面添加上*号,如*p的内容就是0了,也是a的内容 。在c语言中 , 指针被广泛使用,而函数指针是最为高级的用法之一,也是容易疑惑的地方之一 。看下面这段代码: #includevoid f(int a, int* output)随说做了有一段时间的c了,但尽然没有搞明白函数指针的用法,见到了也没有好好研究,今天终于有时间了,在网上搜了一下,终于弄懂了.原来就是定义了一个指针变量,只不过形式有点怪罢了.其实还是当成指针用就行了!一般有两种用法:1定义函数指针int (*functionpoint)(int, int)----这只是定义了一个指向函数的指针int a(int a,int b)----------------这是与之相符的函数原型void main()-----------------------使用}2用typedef定义使用typedef int (*functionpoint)(int,int);----------定义了一种类型名为functionpoint的指针int a(int a, int b)-----------------------------函数原型void main()}函数就是这个函数的指针.
3,C语言指针的用法在c语言中,指针被广泛使用,而函数指针是最为高级的用法之一,也是容易疑惑的地方之一 。看下面这段代码: #includevoid f(int a, int* output){printf("a = %d\n", a);*output = a + 1;} typedef void (*func)(); int main(){func f = f;int ret = 0;f(3, &ret); printf("ret = %d\n", ret);return 0;} 上面看出 func 的类型是与f的类型不匹配的,这样可以通过编译吗? 答案是: 可以的 。由于在c语言中编译函数的时候,是仅仅将其函数名作为该函数的唯一标识,为其分配相应地址 。所以虽然func 与 f的类型不一致,但是对于编译器看来都是两个地址 , 是无所谓的 。用上面的特点,可以写出非常通用的函数指针类型,typedef int (*func)(); 这里之所有要有返回值,是用来标识该函数是否执行成功的错误代码标志 。随说做了有一段时间的c了,但尽然没有搞明白函数指针的用法,见到了也没有好好研究,今天终于有时间了,在网上搜了一下,终于弄懂了.原来就是定义了一个指针变量,只不过形式有点怪罢了.其实还是当成指针用就行了! 一般有两种用法: 1定义函数指针 int (*functionpoint)(int, int)----这只是定义了一个指向函数的指针 int a(int a,int b)----------------这是与之相符的函数原型 void main()-----------------------使用 {functionpoint = a;------------先赋值functionpoint(1,2);----------调用} 2用typedef定义使用 typedef int (*functionpoint)(int,int);----------定义了一种类型名为functionpoint的指针 int a(int a, int b)-----------------------------函数原型 void main() {functionpoint fun;---------------------------定义指针fun = a;-------------------------------------赋值fun(1,2);---------------------------------使用} 函数就是这个函数的指针.#include<stdio.h> #include<math.h> #include <conio.h> void sort(char *a[],int n) int i,j; char *temp; for(i=0;i<n;i++) for(j=i+1;j<n;j++) if(strcmp(a[i],a[j]<0)) temp=a[i]; a[i]=a[j]; a[j]=temp; } } int main() char *a[3]; int i; for(i=0;i<3;i++) a[i] = (char *)malloc(sizeof(char)); for(i=0;i<3;i++) scanf("%s",a[i]); sort(a,3); for(i=0;i<3;i++) printf("%s\n",a[i]); getch(); } 应该改成这样 其中 char *temp; temp=a[i]; a[i]=a[j]; a[j]=temp; 做了修改 原因如下:未修改前temp是一个字符变量 , 而*a[i]是指针a[i]所指向的内容,就把需要交换的字符串的首字符交换了 。你要交换的是指针或者说是地址,而不是指针里的内容 。这就是问题所在 。在temp前加*就表示temp也是个指针,再把a[i]前的*去掉,就实现了交换指针地址的目的 。指针的声明要加*例如 int *a; 使用的时候如果事指针操作则不要带*例如 char *a = “hank”; a++;此时a指向的字符串就变成了“ank” 涉及到指针指向的内容的要加*例如 char b = *a;指向数组的指针,例如int b[10];int *a = b;a就是b[0]的地址*a就是b[0]的内容a+1就是b[1]的地址依此类推又如char *a = "hank";那么通过a就能得到整个字符串"hank"*a是h*(a+1)是a...STRCMP是c语言函数库中的函数虽然传参传的是指针,但是具体比较的时候比较的是里面的内容 。具体涉及到指向数组的指针的应用 。因为c中没有String类型,所以就只能使用char类型的指针来表示字符串 。程序不能运行 int main() 但是没有返回 strcmp函数的 第二个参数不对 还缺少头文件#include "string.h"void sort(char *a[],int n)int i,j;char* temp = new char[100];for(i=0;i<n;i++)for(j=i+1;j<n;j++)if(strcmp(a[i],a[j])<0)temp=a[i];a[i]=a[j];a[j]=temp;} } void main() char *a[3]; int i; for(i=0;i<3;i++) a[i] = new char[100]; for(i=0;i<3;i++) scanf("%s",a[i]); sort(a,3); for(i=0;i<3;i++) printf("%s\n",a[i]); getch(); }【c语言指针在函数中的用法,C语言的指针是如何使用的】

    推荐阅读