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语言指针怎么用在c语言中.指针被用来表示内存单元的地址,如果把这个地址用一个变量来保存,则 这种变量就称为指针变量 。指针变量也分别有不同的类型,用来保存不同类型变量的地址 。严格地说.指针与指针变量是不同的,为了叙述方便 , 常常把指针变量就称为指针 。内存是计算机用于存储数据的存储器 , 以字节作为存储单元.为了能正确的访问内存单 元,必须为每一个内存单元编号,这个编号就称为该单元的地址 。如果将一个旅店比喻成内 存 , 则旅店的房间就是内存单元,房间号码就是该单元的地址 。指针变量定义格式: [存储类型] 数据类型 *指针变量名[=初始值] 指针变量一旦定义,必须采用赋值的方式将其与某个变量实体相联系,才能使用 。指针 变量的赋值方式: 指针变量名;&普通变量名;指针在这可能讲不清楚哦其中还有 指针的指针 ..太多了 建议自己到网站上找个教程 好好学习啊
3,求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()}函数就是这个函数的指针.【c语言指针知识用法大全,c语言中指针怎么使用】
4,C语言指针运算详解去百度文库 , 查看完整内容>内容来自用户:zzbo2022让你不再害怕指针前言:复杂类型说明要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下面让我们先从简单的类型开始慢慢分析吧:intp;//这是一个普通的整型变量int*p;//首先从P处开始,先与*结合,所以说明P是一个指针,然后再与int结合,//说明指针所指向的内容的类型为int型.所以P是一个返回整型数据的指针intp[3];//首先从P处开始,先与[]结合,说明P是一个数组,然后与int结合,//说明数组里的元素是整型的,所以P是一个由整型数据组成的数组int*p[3];//首先从P处开始,先与[]结合,因为其优先级比*高,所以P是一个数组,//然后再与*结合,说明数组里的元素是指针类型,然后再与int结合,//说明指针所指向的内容的类型是整型的,所以P是一个由返回整型数据//的指针所组成的数组int(*p)[3];//首先从P处开始,先与*结合,说明P是一个指针,然后再与[]结合//(与"()"这步可以忽略,只是为了改变优先级),说明指针所指向的//内容是一个数组,然后再与int结合,说明数组里的元素是整型的.//所以P是一个指向由整型数据组成的数组的指针int**p;//首先从P开始,先与*结合,说是P是一个指针,然去百度文库 , 查看完整内容>内容来自用户:zzbo2022让你不再害怕指针前言:复杂类型说明要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下面让我们先从简单的类型开始慢慢分析吧:intp;//这是一个普通的整型变量int*p;//首先从P处开始,先与*结合,所以说明P是一个指针,然后再与int结合,//说明指针所指向的内容的类型为int型.所以P是一个返回整型数据的指针intp[3];//首先从P处开始,先与[]结合,说明P是一个数组,然后与int结合,//说明数组里的元素是整型的,所以P是一个由整型数据组成的数组int*p[3];//首先从P处开始,先与[]结合,因为其优先级比*高,所以P是一个数组,//然后再与*结合,说明数组里的元素是指针类型,然后再与int结合,//说明指针所指向的内容的类型是整型的,所以P是一个由返回整型数据//的指针所组成的数组int(*p)[3];//首先从P处开始,先与*结合,说明P是一个指针,然后再与[]结合//(与"()"这步可以忽略,只是为了改变优先级),说明指针所指向的//内容是一个数组,然后再与int结合,说明数组里的元素是整型的.//所以P是一个指向由整型数据组成的数组的指针int**p;//首先从P开始,先与*结合,说是P是一个指针,然*q++ 和 *(q++)是一样的 没错,括号是会提高优先级,但是对于q++这个自加运算是没有作用的.后置的++做自加运算都是等当前语句处理完了才自加1的.所以*(q++)可以看成是 *(q); q=q+1; 可以看出括号只括着q...这样的括号其实是并没有提高任何优先级的...5,C语言指针的用法#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语言中,指针被广泛使用,而函数指针是最为高级的用法之一,也是容易疑惑的地方之一 。看下面这段代码: #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);---------------------------------使用} 函数就是这个函数的指针.

    推荐阅读