基于Linux的c语言

一维数组与指针

一,整型数组与指针

        数组:在内存中,数组的数据元素是⼀段连续的空间,在这段空间中每 个元素占⽤对应的⼤⼩,元素与元素之间相连。

        数组的地址的访问:

1.使用for循环下标索引。

	int a[5] = {1,2,3};	//定义一个数组,部分初始化赋值。
	for (int i=0; i<5;i++)
	{
		printf("%p\n",&a[i]);
	}

2.使用指针:

int *p;
	p = &a[0];
	for (int i=0; i<5;i++)
	{
		printf("%p\n",p+i);	
	}

        由于数组的数据元素是连续的,元素地址是相邻的,只要有⼀个指针存储了 数组元素的地址,就可以指针运算(+、-)可以得到数组其他元素的地址。总的来说只要知道了数组的首地址就能知道数组中其他元素的地址。

        数组的首地址:数组的第一个元素。数组名就是首地址。

   3.使用指针对数组首地址的访问:

int a[5] = {1,2,3};	//定义一个数组,部分初始化赋值。
int *p;
p = &a[0];

4.使用指针对其他数组元素地址的访问。

        数组⾸地址 + n

二,字符数组与指针

1,字符数组的定义

        char 数组名[ 数组元素个数]       

         例:char buf[10];

2,字符数组元素的首地址

        和整型数组首地址一样,字符数组的第一个元素的地址就是字符数组的首地址,简单的来说,字符数组的数组名就是字符数组的首地址。

        char buf[10];

         char * p = buf;//p就代表数组⾸地址

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 在linux下编写一个应用程序,命名为an_ch2_1b。这个程序不断地输出如下行:Those output come from child,[系统时间] 另外写一个应用程序,命名为an_ch2_1a。这个程序创建一个子进程,执行an_ch2_1b。这个程序不断地输出如下行: Those output come from child,[系统时间] 观察程序运行的结果,并对你看到的现象进行解释。 2. 在linux环境下编写一个控制台应用程序程序中有一个共享的整型变量shared_var,初始值为0;创建一个线程并使其立即与主线程并发执行。新创建的线程与主线程 均不断地循环,并输出shared_var 的值。主线程在循环中不断地对shared_var 进行加1操作,即每次循环shared_var 被加1;而新创建的线程则不断地对shared_var 进行减1 操作,即每次循环shared_var 被减1。观察程序运行的结果,并对你看到的现象进行解释。 理发师问题的描述:一个理发店接待室有n张椅子,工作室有1张椅子;没有顾客时,理发师睡觉;第一个顾客来到时,必须将理发师唤醒;顾客来时如果还有空座的话,他就坐在一个座位上等待;如果顾客来时没有空座位了,他就离开,不理发了;当理发师处理完所有顾客,而又没有新顾客来时,他又开始睡觉。 1. 实现一个“difftree”命令,其功能是比较两个目录下的文件结构和文件信息。当在命令行方式下执行“difftree ”命令时,能够比较目录dir1和 目录dir2是否具有相同的结构,对相同的部分,进一步比较相同文件名的文件内容。列出比较的文件系统结构图。
好的,关于您所提到的问题,我能够给您一些基本的思路和实现方法。管道通信是Linux系统中一种非常常见的进程间通信方式,可以实现不同进程之间数据的传输和共享。下面是一份基于Linux C语言的管道通信例程,您可以参考一下: 1. 父进程创建一个管道,通过fork()函数创建一个子进程来读取管道中的数据。 ``` #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(){ int fd[2]; pid_t pid; char buffer[20]; //创建管道 if(pipe(fd)<0){ printf("Create pipe error!\n"); exit(1); } //创建子进程 pid = fork(); if(pid < 0){ printf("Create process error!\n"); exit(1); }else if(pid == 0){ //子进程读取管道中的数据 close(fd[1]); int n = read(fd[0], buffer, sizeof(buffer)); printf("Child process received: %s\n", buffer); close(fd[0]); }else{ //父进程向管道中写入数据 close(fd[0]); char* data = "Hello, child process!"; write(fd[1], data, sizeof(data)); printf("Parent process sent: %s\n", data); close(fd[1]); } return 0; } ``` 2. 父进程向管道中写入数据,子进程进行读取并输出。 以上面的代码为例,首先父进程通过pipe()函数创建了一个管道fd,接着通过fork()函数创建了一个子进程,并通过pid变量来判断当前进程是否为父进程或子进程。在父进程中,我们先关闭了管道的读端,然后通过write()函数向管道中写入了数据"data",并输出了发送成功的信息。在子进程中,我们先关闭了管道的写端,然后通过read()函数从管道中读取数据到buffer缓冲区中,并输出读取的结果。 这就是一个简单的基于Linux C语言的管道通信例程实现方法。当然,具体实现方法还需要根据实际情况进行调整,但是我们通过这个例子可以清晰地了解到管道通信的基础原理和实现方法,希望能够帮到您。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值