当前位置:萝卜系统 > 硬件软件教程 > 详细页面

指针|刘怀玉|博客园

指针|刘怀玉|博客园

更新时间:2023-06-21 文章作者:未知 信息来源:网络 阅读次数:

根据运行的环境,操作系统可以分为桌面操作系统,手机操作系统,服务器操作系统,嵌入式操作系统等。

calloc malloc_calloc 数组_malloc calloc

例如,在以下代码中,定义了字符变量c和整数变量a,并分别分配了初始值'B'和50.

#include <stdio.h>
int main(void)
{
    char c='A';
    int a=100;
    printf("a=%d\n",a);//输出变量a的值
    printf("&a=%x\n",&a);//输出变量a的地址
    printf("c=%c\n",c);
    printf("&c=%x\n",&c);
    return 0;
}
程序某次的运行结果为:
a=50
&a=12ff40
c=B
&c=12ff44

int a[20];
int *p;
p=a;

指针p加1表示跳过数组元素空间并指向下一个数组元素.

示例:

int *p,a[10];
p=a; //相当于 p=&a[0];
//p+1,相当于访问a[1];

注意: 数组名称a等于数组的第一个元素a [0]的地址,即a等于&a [0].

上面的语句定义了一个整数指针变量p和一个整数数组a,并使p最初指向数组的第一个元素a [0].

当指针变量和数组元素连接时,可以通过以下三种方式访问??数组元素.

直接访问: 数组名称的形式[下标];如a [3]. 间接访问: (数组名称+ i); 0 <>

3)间接访问: (指针变量);通过复制和删除指针P的增量和减量,可以访问不同的数组元素.

for (p=a;p<a+N;p++) //用p的移动范围控制循环次数
    printf ("%d\t",*p);

确定指针移动的开始和结束地址,即循环控制表达式的大小是使用指针访问数组元素的关键.

示例1使用指针变量在数组元素上实现输入和输出操作.

#include <stdio.h>
#define N 10
int main (void)
{
    int *p,a[N],i;
    p=a; //p初始指向a[0]
    for(i=0;i<N;i++) //用整型变量i控制循环次数
        scanf ("%d",p++); //指针P表示地址,不能写成&P
    for(p=a;p<a+N;p++) //用p的移动范围控制循环次数
        printf("%d ", *p);
    return 0;
}

如果存在二维数组:

malloc calloc_calloc malloc_calloc 数组

int a[3][4] = {{1, 3, 5, 7}, {9, 11, 13, 15}, {17, 19, 21, 23}};
int *p=a;

计算机上的存储空间:

A [0]表示元素a [0] [0]的地址,a [1]表示元素a [1] [0]的地址,即a [1]&a [1] [0]; a [2]表示元素a [2] [0]的地址,即a [2]&a [2] [0].

同时,我们将p指向数组a,然后p [0]表示a [0] []行; p [1]表示p [1] []行...

因此,如果要表示二维数组中的特定元素,则需要专门表示一列

现有:

p[i]+j;//表示i行j列的具体元素;

地址也是指针,并且可以通过间接访问字符*访问指针所指向的空间. 二维数组元素a [i] [j]的几种等效形式可以按以下方式访问.

*(p[i] + j) <--> *(*(p + i) + j) <-->*&p[i][j]<-->p[i][j]

#include<stdio.h>
int main()
{
	char *s1="abcde";
	char s2[]={"abcde"};
	printf("%s,%c%s,%c\n",s1,*s1,s1+1,s1[1]);
	printf("%s,%c,%s,%c\n",s2,*s2,s2+1,s2[1]);
	return 0;
}

运行结果为:

abcde,a,bcde,b

abcde,a,bcde,b

请注意输出字符和输出字符串之间的区别.

使用指针(例如s1,s1 + 1,s2等)表示字符串时,字符串从指针所指向的字符开始,直到字符串符号“ \ 0”的结尾;当使用s1时,s1 [1],(s1 + 1)calloc 数组,s2 [0]等表示字符,即指针所指的字符或位于下标中的字符元素. 可以看出,字符数组和字符指针的用法相似. 但是两者是不同的:

字符串指针变量本身是一个用于存储字符串的第一个地址的变量. 字符串本身存储在从第一个地址开始并以\ 0结尾的连续存储空间中.

calloc malloc_malloc calloc_calloc 数组

char * ps =“ C语言”;

顺序为:

1. 将内存分配给字符指针;

2. 将内存分配给字符串;

3. 将字符串的第一个地址分配给字符指针;

这里有两点需要清楚考虑:

1. * a仅指向一个字符

#include <stdio.h>
#include <stdlib.h>
int main(void){  
    char *a= "bcd" ;  
    printf("输出字符:%c ", *a);  /*输出字符,使用"%c"*/
    printf("输出字符:%c ", *(a+1) );  /*输出字符,使用"%c"*/
    printf("输出字符串:%s ", a); /* 输出字符串,使用"%s";而且a之前不能有"*"  */
}

运行结果:

b c bcd

2. 如果字符串常量出现在表达式中,则表示的值是字符串常量的第一个字符的地址. 因此,“ hello”仅代表其地址. 原始的声明方法等效于以下声明方法:

char *a;
a="hello";/"hello"仅代表第一个字符的地址

通过字符指针修改变量字符串

通过字符指针变量,可以访问指向的字符数组中保存的字符串. 您不仅可以读取保存在数组中的字符串,还可以修改字符串的内容. 从数组的本质上可以理解原因: 数组是同一类型的变量的集合,因此存储在其中的字符串可以理解为由几个字符变量组成. 每个字符变量当然都可以更改.

示例:

#include<stdio.h>
#include<string.h>
int main (void)
{
    char str[30]="Learn and live."
    *p=str;
    *(p+6)='A';
    *(p+10)='L';
    puts(str);
    return 0;
}

在此程序中calloc 数组,字符指针p指向数组str中的字符串. 由于字符串由一系列字符变量组成,因此可以通过指针变量p来更改字符串中的字符. 因此,程序输出: 学习和生活.

calloc malloc_malloc calloc_calloc 数组

p =(int)malloc(nsizeof(int))

在特定用途中,您需要将malloc()的返回值转换为特定的指针类型,并将其分配给指针.

请勿超出范围使用,大小由分配后确定.

分配多个连续的空间并将其初始化为0. 应用程序成功后,将返回指向分配的内存空间的起始地址的指针;否则,将返回0. 如果失败,则返回NULL(0).

动态内存释放功能free()

释放应用的动态内存空间.

定义指针frondPtr,behindPtr用于前进和后退以同时修改数组元素

将温度定义为介质修改参数

将frondPtr地址初始化为x;

初始化为落后的Ptr地址是x +(n-1);

对于指针frondPtr地址小于backPtr

frondPtr ++,背后的Ptr-

交换头和尾元素

结束

将op定义为搜索字符

将str [N]定义为搜索字符串

calloc 数组_calloc malloc_malloc calloc

输入搜索字符

getchar()吸收换行符

获取输入字符串

定义字符串指针p并将其初始化为0;

调用FindChar函数查找目标字符并将返回地址分配给p,并判断p是否为0;

找到输出索引索引p与str的首地址之间的差异

未找到输出未找到

函数char * FindChar(char * p,char op)

while (*p 不为0并且不为换行符'\n')
查找字符op
p++;
找到return p;
    找不到return NULL;

定义字符数组temp [11]辅助交换字符串

输入N,K

定义字符串数组s [101] [11]以输入和存储字符串;

对于循环输入字符串s [i]

字符串排序

对于j = 0到N-i; j ++进行我扫描

比较相邻字符串的大小,将大字符串向后移动

判断是否进行第K轮

如果您进行第K轮,请按顺序输出每个字符串

否则,进行下一轮扫描


本文来自本站,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-283647-1.html



温馨提示:喜欢本站的话,请收藏一下本站!

本类教程下载

系统下载排行

网站地图xml | 网站地图html