复习一下整型数组,字符数组,整型指针数组,字符指针数组,整型数组指针,字符数组指针

20:52:01 2019-12-31

整型数组 int a[10];
字符数组 char b[10];

_______________________
整型指针数组 int *p[10]; |__|__|__|__|__|__|__|__|__| 每个格子里存的是一个指针,每个指针都是int类型的,会指向一个int的值.

1 for(int i=0; i<10; i++)
2   p[i] = &a[i];    //把a中的每个元素的地址都放在了指针数组p里.
3
4 for(int j=0; j<10; j++)
5   printf("%d ", *(p[i]));//把p中的地址转化为真实的内容,也就是使用*对地址取值.

字符指针数组 char *c[10]; 和上面一样,每个指针都是char类型的,会指向一个char

下面这两个是等式.表示左右两边的值是相等的

a == &a[0]
*a[i] == a

重点说说数组指针

整型数组指针 int (*P)[10]; p是一个指针,这个指针指向一个有10个格子的数组.这个10个格子里存的都是int类型的东西

int a[10];
int (*p)[10];
p = a;
p = &a;

 

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3
 4 int main() {
 5
 6     int a[10] = {1,2,3,4,5,6,7,8,9,10};
 7     int (*p)[10];
 8     p = &a;        //这种写法才是正确 且没有错误的
 9     //p = a;  这种写法会给警告.虽然我们知道数组的名字也可以被用作数组的首地址.
10     int i = 0;
11     for(i=0; i<10; i++)
12         printf("%d ", p[0][i]);        //这里的p其实是指向一个二维数组的首地址,但是实际上指向的是一个一位数组,所以p[0][0]就是这个数组a的a[0]了.
13                                     //这里的p[0][i]就是遍历数组的第一行.
14     /*
15     上面的p = &a;这句话其实就是将p[0]指向了a[10]  所以p[0][i]只需要对i++即可操作a[i]了.
16     p[0]-> [p00][p01][p02][p03][p04][p05][p06][p07][p08][p09] 第1 行
17     p[1]-> [p10][...][...][...][...][...][...][...][...][...] 第2 行
18     p[2]-> [p20][...][...][...][...][...][...][...][...][...] 第3 行
19     p[3]-> [p30][...][...][...][...][...][...][...][...][...] 第4 行
20     p[4]-> [p40][...][...][...][...][...][...][...][...][...] 第5 行
21     p[5]-> [p50][...][...][...][...][...][...][...][...][...] 第6 行
22     p[6]-> [p60][...][...][...][...][...][...][...][...][...] 第7 行
23     p[7]-> [p70][...][...][...][...][...][...][...][...][...] 第8 行
24     p[8]-> [p80][...][...][...][...][...][...][...][...][...] 第9 行
25     p[9]-> [p90][...][...][...][...][...][...][...][...][p99] 第10行
26     经过上面这个表,就能够知道这个数组指针p是一个怎样的指针了. 数组指针p竟然是一个二维指针.
27     */
28
29     return 0;
30 }

字符数组指针 char (*c)[5];
这句话中只有c这个符号是我们自己写的,其他的符号C编译器都认识.
所以我们来品品c是什么应该怎么读.
c是一个指针,这个指针指向一个 长度为5 的里面存着 字符 的数组

按照这样的读法,那么int (*p)[10];也很好读了
p是一个指针,这个指针指向一个 长度为10 的里面存着 整型数字 的数组

原文地址:https://www.cnblogs.com/dhu121/p/12127390.html

时间: 2024-10-09 09:05:19

复习一下整型数组,字符数组,整型指针数组,字符指针数组,整型数组指针,字符数组指针的相关文章

strlen 字符型数组和字符数组 sizeof和strlen的区别 cin.get(input,Arsize)

strlenstrlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0').指实际字符串或字符数组的实际长度(不是所占空间的字节数).函数原型extern unsigned int strlen(char *s)意思是,他从指针指向的某个地址开始扫描,并读取字符,一直读到'\0'为止,不包括'\0'strlen用于字符数组或者指针 字符型数组char

求一个整型数字中有没有相同的部分,例如12386123这个整型数字中相同的部分是123,相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0。方法是先将整型数字转换到数组中,再判断。函数为 int same(int num)其中num是输入的整型数字

import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Test { public static void main(String[] args) { /** * 2.求一个整型数字中有没有相同的部分,例如12386123这个整型数字中相同的部分是123, * 相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0. * 方法是先将整型数字转换到数组中,再判断.

在一个整型数组中有一个元素的出现次数超过了数组长度的一半,试设计一个 在时间上尽可能高效的算法,找出这个元素。

题目:在一个整型数组中有一个元素的出现次数超过了数组长度的一半,试设计一个 在时间上尽可能高效的算法,找出这个元素.要求:(1)给出算法的基本设计思想.(2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释.(3)说明你所设计算法的时间复杂度和空间复杂度. (1)基本的设计思想: 一个数字出现的次数超过了长度的一半, 那么我们可以这样认为这个数字出现的个数一定大于其他全部数字出现的个数之和.算法的步骤如下: ①设数组为data[],数组长度为n,i=1.置currentAxi

返回一个整型数组中最大子数组的和(02)

组员:刘伟 http://www.cnblogs.com/Lw-1573/p/5323542.html 1.要求: 输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.如果数组A[0]……A[j-1]首尾相邻,允许A[i-1],…… A[n-1],A[0]……A[j-1]之和最大.同时返回最大子数组的位置.求所有子数组的和的最大值. 2分析: 这个题目是在上个题目的基础的加上数组首位相连,并该数组最大子数组的和,实现方法就是把环变成直线的方法,

数组问题(三)求二维整型数组最大联通子数组的和

相较于上次求最大子矩阵的和,这次明显更难了一些. 将问题分解并分析,可以想到 先求各行中的最大子数组,并记录下标,求完之后再将各行的最大子数组的下标进行比较可以得到两种情况 1.上一行的最大子数组下标范围和下一行的最大子数组下标范围有重合的部分. 2.上一行的最大子数组下标范围和下一行的最大子数组下标范围无重合的部分. 程序代码: #include<iostream> using namespace std; int calculate(int n,int a[],int &sm,in

010整型、浮点型、字符串型、列表型、字典型、布尔型

整型.浮点型.字符串型.列表型.字典型.布尔型 一.整型(int) 1.1作用 表示人的年龄.各种号码.级别 1.2定义 age = 18 # age=int(18) print(id(age)) print(type(age)) print(age) 输出结果: 4530100848 <class 'int'> 18 1.3 如何用 加减乘除.逻辑判断(大于.小于) 二.浮点型(float) 2.1 作用 表示身高.体重.薪资 2.2 定义 salary = 2.1 # salary=flo

char型字符串(数组)与string型字符串 指针与引用

一.常指针: int *const p;    //指针不可改变,但是指针指向的数据可以改变. 指向常量的指针: const int *p;    //指针可以改变,但是指针指向的数据不可以改变. 指向常量的常指针: const int *const p;    //指针不可改变,且指针指向的数据也不可改变. 引用就是别名,定义引用的同时必须要对引用进行初始化. 二.利用引用返回多个值: 引用就是别名,引用必须要初始化. #include "stdafx.h" #include <

查找两个整型数组的公共元素

一,问题描述 给定两个整型数组,假设一个长度为M,另一个长度为N.请找出(打印出)这两个数组中的公共元素. 二,算法分析 有两种思路求解这个问题. ①使用一个HashSet保存第一个数组中的所有元素,然后遍历第二个数组中的每个元素,判断该元素是否在HashSet中.如果在,就表明这个元素是公共元素. 此方法的时间复杂度为O(M+N),空间复杂度为O(M)[假设第一个数组长度为M,保存在HashSet中]. ②首先对两个数组进行排序.然后分别设置两个指针 i, j   初始时,分别指向两个数组的第

LeetCode Remove Duplicates from Sorted Array删除整型数组中的重复元素并返回剩下元素个数

1 class Solution { 2 public: 3 int removeDuplicates(int A[], int n) { 4 int *s=&A[0],*e=&A[0]; //s指向开头第一个,e往后遍历相同的 5 int t,i,j=n; 6 for(i=1;i<n;i++){ 7 e++; 8 if(*s==*e) 9 j--; 10 else{ 11 s++; 12 *s=*e; 13 } 14 } 15 return j; 16 } 17 }; 题意:给一个