c语言指针 指针数组 函数数组

图片说明
图片说明
图片说明
图片说明
图片说明
图片说明
想请教各位大佬这几个题中指针所代表的含义
如果能解释一下题目的解题过程就更好了 最近学指针 真的是被它搞得有点晕

0

4个回答

1.
1.1 解题思路:定义一个字符串数组,数组内依次存放12个月份的英文名称,通过数组索引可将月份号与月份英文名称对应起来,即通过月份号-1对名称数组进行索引便可得到月份名称。
1.2 指针含义:
const char* months[] = {…}
char const* months[] = {…}
char* const months[] = {…}
去掉const应该很容易理解,就是字符串指针数组,字符串通过字符串指针的形式表示。然后,再加上const进一步理解。Const表示常量,相当于限定符。Const加在类型变量定义前面,表示该类型变量是常量。
第一个,加在char*前面,表示字符串指针指向的内容是常量,即字符串是常量,不能通过该指针修改字符串。第二个含义与第一个相同,但第一种形式更易理解,推荐第一种形式。第三个const在months前面,表示字符串指针months是常量,不能修改指针。
Static表示变量为静态变量,其生存周期与全局变量相同。对于初学者记住其特性就行,即static变量只初始化一次,存在于整个程序运行期间。深层次理解,static变量存放于代码区,而不像局部变量那样生存于堆栈上。局部静态变量生存期不变,只是仅在局部可见。对于本例中,GetMonthName函数中的static变量尽在该函数中可见,外部无法访问该变量。相对于全局变量,其不会与外部区域定义的同名变量发生冲突。若两个全局变量同名,则编译时会发生错误。
3.
3.1 解题思路:排序采用经典的冒泡算法,即2遍扫描一个数组,比较相邻的两个数组元素,若不满足预设条件(如前一个小于后一个),则两者交换。
Main()函数的过程为,先利用库函数strcmp作为预设条件,对strs[]数组前6个元素进行排序,然后输出排序后的结果。接着利用自定义函数str_cmp_n作为预设条件进行排序输出。
程序中出现有两种指针类型,第一种与题1中的相同,即const char * valuename类型的指针,含义与题1相同。另外,若valuename后面有[], 即const char * valuename[]形式,表示是指针数组,指针数组中每个元素是一个指针,每一个指针指向一个字符串。第二种是一种比较高级的指针-函数指针,即int (*cmp),函数名称相当于一个全局变量,函数指针指向函数代码段的索引地址,通过函数指针,程序可以调到相应的代码区域执行代码。对于初学者,了解即可。

2.
2.1 解题思路:main()函数的思路题目中已经介绍,不再赘述。介绍一下Sort函数的思路,Sort函数仍然采用冒泡算法,只不过元素交换采用交换指针的方式,即通过交换指向两个元素的指针实现元素交换。
本题中出现了字符串指针、指针数组以及const指针数组,其都可以看作字符串指针的变形。
Char * str为字符串指针,未加const限制,指针值和指针指向的内容都可以改变;
Const char* str加了const限制,指针值可以改变,但指针指向的字符串不可以改变;
Const char* str[]为字符串指针数组,数组的每一个元素是一个指针,指针指向的字符串不能改变;但指针的值是可以改变的。
Char str[][]为二维指针数组,数组元素的索引只能通过str指针加上偏移量实现,意味着无法实现指针值的改变。
在Sort函数中,元素交换的代码是
const char* t = strs[i];
strs[i] = strs[j];
strs[j] = t;
这里strs[i], strs[j], t都是指针,交换的是指针的值,并不是指针指向的字符串。

3

实际上是定义了char型的指针数组,通过char * months[]将十二个月份的字符串首地址保存在了这个数组中。另外关于const有个口诀是左数右指,意思是const在 * 左边那么数值是常量,如果const在 * 右边,那么指针是常量

0

这里的指针基本都是说char类型的,只不过书本上是一个变量,而这里用的数组形式而已

0

把指针p也当作一个变量,只是里面的值是地址。p=&a; 他指向a,他的内容就是存储a的地址。假如a是一个数组,因为数组的地址连续,所以p++
能指向数组的下一个元素

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c语言指针、数组、函数做函数参数详解
用指针做参数 #include <stdio.h> void swap(int *a, int* b) { int t = *a; *a = *b; *b = t; } int main() { int a = 3, b = 4; swap(&a, &b); printf("%d %d", a, b); re...
C语言 函数返回数组和指针区别
1.代码示例 #include char * str1() { char A[] = "Hello!"; return A; } char * str2() { char A[] = "Hello!"; char *p; p = A; return p; } char * str3() { char A[1000] = "Hello!"; return A; } char *
C语言学习笔记——指针、数组作为函数参数传递的方式
指针作为函数参数传递一维数组 C 语言中声明了一个数组TYPE array[n],则数组名称array 就有了两重含义: 第一,它代表整个数组,它的类型是TYPE[n]; 第二,它是一个常量指针,该指针的类型是TYPE*,该指针指向的类型是TYPE。 因此,指针作为函数参数传递一维数组有4种形式: #include <stdio.h> #define N 3 float average...
C语言指针(函数指针数组,二级指针)
int (*p[num])( char*,int,int ); int (*(*p)[num])(int a); 上一篇博客最后的两个例子的答案分别是:函数指针数组,函数指针数组的指针。 函数指针数组指针和前面的数组指针其实没有太大区别。然后今天主要理一下函数指针数组和二级指针。 函数指针数组 函数指针数组中,存放的一定要是相同返回值类型,以及相同参数列表的函数指针,这样数组可...
C语言的指针数组,多重指针以及main函数的参数
前言 1.本博文基于VC++6.0开发调试运行; 2. 本博文只是对多重指针和指针数组的一个小总结; 指针数组 是什么?是一个数组,是一个元素都是用来存储地址的数组; 定义方式:类型名 *数组名[数组长度] 特点:以往的数组中,一个数组名只能确定一段内存空间,对这段固定内存内的变量的读写修改操作,但是数组指针在一个数组内可以指向若干字符串,这样,可以根据需要用一个指针数组名调用不同字...
C语言解惑—指针、数组、函数和多文件编程
以C语言中最核心的函数设计为主线 串联与之相关的指针、数组、函数、多文件编程等难点 以“解惑”作为编写宗旨,启迪你的编程思维方式! C语言编程仍然是编程工作者必备的技能。本书的前提是读者已经学过C语言。 本书将集中讨论C语言的核心部分——函数设计。本书的落脚点是实现C语言的结构化程序设计。 书中将完整、系统地论述各个部分的知识并结合实用程序和趣味游戏程序,综合讲解函数设计、多文件编程和结构化程序设计的方法。 本书既可以作为教师、学生及工程技术人员的参考书,也可以作为常备手册。
指针和数组的经典习题
练习1: #include <stdio.h> int main() { int a[5] = {1,2,3,4,5}; int *ptr = (int*)(&a+1); printf("%d,%d", *(a+1), *(ptr-1)); return 0; } &amp
C语言指针和数组练习题——深入了解指针和数组
第一题:#include <stdio.h> #include <windows.h> #pragma warning (disable:4996) int main() { int a[5] = { 1, 2, 3, 4, 5 }; int *ptr = (int *)(&a + 1); //数组名在和&或sizeof()一起使用时代表整个数组...
C语言中指针数组作为参数传递修改内容
#include void change(char **strs){ strs[0] = "paaa"; strs[1] = "pbbb"; strs[2] = "cpcc"; strs[3] = "ddxd"; } int main() { char *strs[4]; int i; strs[0] = "aaa"; strs[1] = "bbb"; strs[2] =
指针数组&数组指针的分配内存及函数参数 C语言版
最近写代码总是被基础知识卡住,十分耽误时间,今天又卡住了。所以下定决心一定要弄清楚这个问题,然后不好的是网上的资料总是解决的并不清楚,总是在纠结什么是指针数组什么是数组指针,看了《C缺陷和陷阱》也没有我想要的东西。要么就是C和C++混为一谈,new int[5]这种语法C肯定是错误的,所以找个机会总结一下,然后希望以后不要再栽在基础上。定义指针数组:int p[10] 数组指针 int(*p)[5]
C语言 指针和指针数组作main函数的形参
不带形参的main函数一般写成: int main() 或 int main(void) 表示mian函数没有参数,调用mian函数时不需要给出实参。而mian函数有形参的形式:int main( int argc, char** argv) int main( int argc, char *argv[]) 我是这样理解这两种方式,其中第一种方式 **argv是指针的指针,指针指向变量,指
C语言中sizeof测试数组指针大小问题
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int main(int argc, char *argv[]) { int arr[5] = {1, 2, 3, 4, 5}; int(*p)[5] = &arr; //typedef与赋值操作不能同时使用。 type...
c 语言中的sizeof(数组名)和sizeof(指针)
sizeof(数组名):返回数组所有元素占有的内存空间字节数。 sizeof(指针) :返回计算机系统的地址字节数,如果是32位系统,返回4,16位系统返回2。
C语言--函数指针与函数指针数组
#include //函数指针 int fun(void) { printf("Hello World\n"); return 0; } int main(int argc, const char *argv[]) { printf("main = %p\n",main); int (*p)(void) = fun; //p 函数指针:本质是指针 p();
指针数组与数组指针 指针函数与函数指针 的区别
 指针数组与数组指针  指针数组 指针数组是一个数组,数组的元素保存的是指针; 数组指针 数组指针是一个指针,该指针指向的是一个数组; #include <stdio.h> #define SIZE 5 int main(int argc, char const *argv[]) { int arry[5] = {1,2,3,4,5}; int (*p)[SIZE...
【C语言】数组,指针的相关运算
一维数组 #include <stdio.h> #include <string.h> int main() { //一维数组 int a[] = { 1,2,3,4 }; printf("%d\n", sizeo
C语言中的指针数组和数组指针
c中指针可以作数组使用比如: int a[] = "hello world"; int *p; p = a; printf("%c", *p++); printf("%c", p[1]); //利用数组形式输出数组不一定能作指针用比如: int a[] = "hello world"; printf("%c", *a++); 这时会报错,你不能改变数组的地址; 但是可以这样使用
C语言基础:指针数组与数组指针
        一、指针数组        在这一节中我们来学习一个数组,这个数组比较特殊,也比较普通。说它特殊是因为这个数组是指针的数组,也就是说我们有一个数组,这个数组里存放的变量类型是指针型变量;说它普通是因为数组变量其实与其它普通变量没有什么区别,指针变量就是一种可以存放内存地址的变量,所以它们也可以被定义成一串连续的变量集合,这个集合就是指针数组。例如,我们可以定义一组变量,这组变量就是...
C语言:对指针数组中N个指针元素进行大小排序
#include<stdio.h> #include<string.h> #include<stdlib.h> int main() { int n; printf("please input num:\n")// 输入字符串个数 scanf("%d",&n); char *str[n]; char *ptr =...
18. C语言 -- 指针数组和数组指针
本博客主要内容为 “小甲鱼” 视频课程《带你学C带你飞》【第一季】 学习笔记,文章的主题内容均来自该课程,在这里仅作学习交流。在文章中可能出现一些错误或者不准确的地方,如发现请积极指出,十分感谢。 也欢迎大家一起讨论交流,如果你觉得这篇文章对你有所帮助,记得评论、点赞哦 ~(。・∀・)ノ゙ 1. 指针和数组的区别   指针是左值,而数组名只是一个地址常量,它不可以被修改,所以数组名不是左值。其...
C语言学习小结(指针、数组、函数)
C语言学习小结(指针、数组、函数)       v 指针   1. 指针到底是什么?   指针其实也是一种特殊的变量,它与其他普通变量的区别是:普通变量里面是数据本身,而指针变量里面是数据的地址。   例如: #include int main() { int *p; //定义一个指针变量
指针数组、数组指针、函数指针、函数指针数组详解
总结指针和数组部分的相关知识自己写的一遍博客: 指针是变量单元的地址,地址指向该变量单元,因此地址形象的称为“指针”,通过指针(地址)可以找到内存单元。   (总结)1.指针是存放地址才出现的,地址是为了标示一块地址空间的;                 2.指针让地址有地方存放,指针让内存的访问更加方便;                 3.指针的大小在32位平台是4个字节,在64位平
C++函数指针数组的使用方法
2015-11-24 一、   缘起 什么情况下,想到将函数指针数组来的呢?是由于近期写的一个程序中,有一系列顺序化的函数,且这些函数的形式基本一致,需要对每一步的执行结果进行判断,是否执行成功,若执行成功,则继续执行下一函数,如果执行失败,则终端执行并退出。 由于依次要执行的函数比较多,有5个。按照常规思路来写代码的话,就是对每一步执行的结果进行IF-ELSE判断,根据结果决定下一步执行的
C/C++ 指针数组与数组指针、函数指针与指针函数、模板函数与函数模板、类模板与模板类区别
函数模板与模板函数、模板类与类模板区别: 在C++中有好几个这样的术语很重要: 函数指针——指针函数数组指针——指针数组类模板——模板类函数模板——模板函数    1.函数指针——指针函数     函数指针的重点是指针。表示的是一个指针,它指向的是一个函数,例子:   int   (*pf)();     指针函数的重点是函数。表示的是一个函数,它的返回值是指针。例子:
老汤回味——C语言指针,数组及动态内存分配
了解过C语言的人,都会知道C语言有一种独特的变量,那就是指针。指针是一把双刃剑,它为我们提供了操作内存的手段,但同时不恰当的使用,会为我们带来很多麻烦。如何理解指针呢?如果把一个个内存单元看做一个个房间,指针就好像一个个指示牌(内存地址),通过指示牌,我们也可以找到房间(内存单元),查看房间里面的东西。比如现在有一个整型变量a,我们可以理解为一个门牌号为a的房间,我需要拿到这个房间的指示牌,只需要...
C语言数组指针初始化
1.char类型的指针 char*names[]={"zhangsan","lisi","wangwu"};//可以这样初始化 这样,每个指针指向对应的字符串 2.其他类型的指针 int*nums[]={1,2,3,4,5};//不可以这样初始化 原因:指针的初始化或赋值可以使用0值、常量表达式、和类型匹配的对象 的地址。//指针需要用地址初始化 如上,字符串字面值常...
C语言-数组、字符指针数组函数接口与使用
qwe
C语言二维数组与数组指针和指针数组的应用
#include #include float stu_ave(int *p,int n) //接收列地址,和元素个数   { int i; float sum = 0; for(i = 0 ; i sum += p[i];//p[i]  p是一个列地址 把二维看成一个一维数组所以就是P[i] 来进行遍历每个元素  return sum/n; } int
C语言---关于char型数组和char型指针的问题
今天在学习数据结构中线性表的过程中,碰到了关于char型数组和指针的问题。说实话这也是困扰了我许久的问题。 问题具体描述 如上代码,定义了一个char型数组a后,将其作为形参传入insert()函数,再返回数组a的地址。 编译出错。错误代码如下: 不兼容的参数类型赋值:char*赋值char[8]。 1.由于返回值不可能为一个数组,所以只能通过修改主函数中a的类型:cha
c语言 指针数组和数组指针之间地址的区别。
只涉及到表面含义,供大家参考! 先把图片摆上!! 咱们先一点一点理解,大家看到定义了两个不同的指针类型,一个是char一个是int主要是体现在后面解释的元素地址加一的区别。 1、初始化 指针数组 char *p[10]={NULL}; NULL外面加上大括号是因为它是包含了10个char型元素的数组。 数组指针 int *(q)[10]=NULL; 因为它是一个数组指针,...
c语言基础(3) 数组和指针作为实参和形参的问题
字符串 char a[]="abc"; printf("%s",a); fgets(a,100, stdin) //安全的字符串输入函数 printf("%s",a); scanf("%*[^\n]"); //两个scanf清空输入缓存 scanf("%*c");   int 值作为实参    指针作为形参     void xch...
C语言数组与指针学习总结
工作之后最害怕的是对最基础知识的考查,因此还是有必要随时回炉学习,温故知新。今天再次回顾总结一下C语言数组相关知识。主要是学习《C语言陷阱与缺陷》的学习笔记。        C语言数组值得注意的有两点:        1,C语言中只有一维数组,而且数组的大小必须在编译时期就确定下来(旧标准)。然而,C语言数组的元素可以是任意对象,包括数组。这样就给多维数组的实现或者仿真提供了可能。     
指针 中 数组指针,指针数组,数组传参,指针传参
1.指针数组 指针数组是一个数组,里面每个元素是指针。 初始化如下 2.数组指针 指向数组的指针 形式如下int (*p)[5]      因为[ ]比*优先级高,因此表示一个指针必须给*p带上括号 赋初值如下 3.数组指针的应用:#include #include void print(int arr[3][4], int x, int y) {
C语言的字符指针变量和字符串数组的区别
前言 本博文的代码基于VC++6.0开发调试; 本博文概念比较多,属于学习笔记类型; 具体的区别 从概念上来说:
关于C语言中的数组指针、指针数组以及二级指针
概念解释数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针;在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。数组指针指向的是数组中的一个具体元素,而不是整个数组,所以数组指针的类型和数组元素的类型有关。 指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称,即每个元素都是指针。 二级指针 : 如果一个指针指
指针、数组练习题
指针、数组练习题 我学习过程中总结了9道比较典型的练习题。 #define _CRT_SECURE_NO_DEPRECATE 1 #include "stdio.h" //练习1 int main() { int a[5] = { 1, 2, 3, 4, 5 }; int *ptr = (int*)(&a + 1); printf("%d,%d\n", ...
C语言学习——指针与数组、空指针
指针与数组 方法1 方法2 小案例指针与数组数组的元素在内存中是互连的,通过指针操作数组某个元素方法1int vals[4]={1,2,3,4}; int* p=vals; /*p指向数组的内存地址,即第一个元素的地址*/ printf(“%d”,*p); /*输出p地址的值*/ p+=1; /* p向后移动一个内存地址*/ printf(“%d”,*p); /*输出当前p地址的值*/ printf
C语言 浅谈数组和字符指针的赋值问题
在学习C语言的过程中,总是会遇到很多问题,不管它简单与否,了解到其本质问题就迎刃而解。一下我阐述的知识点,我在编程学习中遇到问题,并查阅资料料所总结的一点东西,可能会有不严谨或错误的地方,希望指出改正。 错误一: char str[10]; str = "hello"; 以上代码,是绝对不被允许的,因为数组除了在声明时的初始化可以成块的把数据赋值给数组。其他任何时候都只能是单个的元素对其...
C语言---(一)指针做函数参数/数组/结构体的问题及
先给一个连接,我觉得总结的特别好:https://blog.csdn.net/tsfkurry/article/details/42027407指针最重要理解下面几句话:1.编译器总是要为函数的每一个参数制作临时副本,指针参数p的副本是_p,编译器使_p=p.如果函数体内的程序修改了_p的内容,就导致参数p的内容做相应的修改。这就是指针可以作为输出参数的原因。在例子中,_p申请了新的内存,只是把_...
C语言指针小总结
C语言 指针 在函数中的使用,指针变量,指针数组,指针和函数的关系,指针可以作为函数的参数,传数组的地址,传指针数组的地址
相关热词 c#异步发送kafka c#窗体编号 c# 操作二进制文件 c# 反射 机制 c#线程 窗体失去响应 c#角度转弧度 c# 解析gps数据 c# vs设置 语法版本 c# json含回车 c#多线程demo