指针数组

四、指针的使用

北慕城南 提交于 2020-01-21 10:08:22
1.指针赋值 ① int i , *p , *q; p = &i;//p获取i的地址 q = p;//指针变量p把地址拷贝给指针变量q *p = 1;//改变i的值为1 *q = 2;//改变i的值为2 ② int i , j , *p , *q; p = &i;//指针变量i获取i的地址 q = &j;//指针变量q获取j的地址 i = 1;//给i赋值为1 *q = *p;//把指针p的值拷贝给指针q printf(“%d %d\n”,*p,*q);//输出 2.指针与一维数组 ①数组名代表数组的首地址,是一个地址常量,即数组首元素地址 示例: void printfMaxValueOfArray(int array[] , int count); void printfMaxValueOfArray(int array[] , int count){ int max = 0; for(int i = 0 ; i < count ; i ++){ if(max < array[i]){ max = array[i]; } } printf(“max = %d”,max); } int main(){ int number[] = {10,20,15,3,8,9,100}; printfMaxValueOfArray(number,sizeof(number) / sizeof

c++中指针作为函数参数的详细理解

一笑奈何 提交于 2020-01-21 10:08:06
在C语言中,函数的参数不仅可以是整数、小数、字符等具体的数据,还可以是指向它们的指针。用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着函数的结束而被销毁。 像数组、字符串、动态分配的内存等都是一系列数据的集合,没有办法通过一个参数全部传入函数内部,只能传递它们的指针,在函数内部通过指针来影响这些数据集合。 有的时候,对于整数、小数、字符等基本类型数据的操作也必须要借助指针,一个典型的例子就是交换两个变量的值。 有些初学者可能会使用下面的方法来交换两个变量的值: 1 2 3 4 5 6 7 8 9 10 11 12 13 #include <stdio.h> void swap( int a, int b){ int temp; //临时变量 temp = a; a = b; b = temp; } int main(){ int a = 66, b = 99; swap(a, b); printf ( "a = %d, b = %d\n" , a, b); return 0; } 运行结果: a = 66, b = 99 从结果可以看出,a、b 的值并没有发生改变,交换失败。这是因为 swap() 函数内部的 a、b 和 main() 函数内部的 a、b 是不同的变量,占用不同的内存,它们除了名字一样

数组指针等价于二维数组

☆樱花仙子☆ 提交于 2020-01-21 03:02:25
数组指针:指针指向了一个数组 指针数组:数组中存储的为,指针 #include <stdio.h> //void fun(char a[][20],int n)直接传二维数组 void fun(char(*a)[20], int n)//数组指针 { int i; for (i = 0; i < n; i++) scanf("%s", a[i]); } int main(void) { int i; char s[3][20]; fun(s, 3); for (i = 0; i < 3; i++) printf("%s\n", s[i]); return 0; } 来源: CSDN 作者: captionyao 链接: https://blog.csdn.net/qq_38436175/article/details/104056458

指针和数组计算大小(sizeof()和strlen()的对比)

醉酒当歌 提交于 2020-01-20 01:34:14
/**--------------------------------------------------------------- * @brief 指针和数组变量sizeof()和strlen()的比较 * *---------------------------------------------------------------*/ int point_array_init ( ) { int * PointOne = "123456" ; char * PointTwo = "123456" ; char * PointThree = "123456\0" ; int ArrayOne [ 6 ] = { 1 , 2 , 3 , 4 , 5 , 6 } ; char ArrayTwo [ 6 ] = { 1 , 2 , 3 , 4 , 5 , 6 } ; char ArrayThree [ 7 ] = { 1 , 2 , 3 , 4 , 5 , 6 , '\0' } ; printf ( "\n\t|-------------------------------------------------------------------------\n" ) ; printf ( "\t| int *Point: | " ) ; printf ( "sizeof(Point

函数指针数组实现计算器和qsort的使用

我只是一个虾纸丫 提交于 2020-01-19 22:40:36
斜体样式 ```c //函数指针数组实现计算器的功能 #include<stdio.h> int add(int x, int y) { return x+y; } int min(int x, int y) { return x-y; } int mul(int x, int y) { return x y; } int div(int x, int y) { return x/y; } // *************************************************** void menu() { printf(“ \n"); printf(" 1.add 2.min \n"); printf(" 3.mul 4.div \n"); printf(“ 5.exit *********************\n”); printf(" **************\n”); } int main() { int rel = 0,input = 0,x,y; int (*pl[5])(int, int)={0,add,min,mul,div};//函数指针数组 do { menu(); printf(“请输入一个数\n”); scanf("%d",&input); if(input>0 && input<=4) { printf(“请输入两个操作数\n”)

云计算之go语言——基础语法(中)

雨燕双飞 提交于 2020-01-19 14:18:32
9 Go 语言循环语句 1, 概念 在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。 2, 分类 1. for 循环 : 重复执行语句块 a. 语法: for init; condition; post {} for condition {} for {} init: 一般为赋值表达式,给控制变量赋初值; condition: 关系表达式或逻辑表达式,循环控制条件; post: 一般为赋值表达式,给控制变量增量或减量。 b. 实例 for02.go package main import "fmt" func main() { sum := 0 for i := 0 ; i <= 10; i++ { sum += i } fmt.Println(sum) } for03.go package main import "fmt" func main() { sum :=1 for ; sum <=10 ; { sum +=sum } fmt.Println(sum) for sum <= 10 { sum +=sum } fmt.Println(sum) } c. For-each range 循环 这种格式的循环可以对字符串、数组、切片等进行迭代输出元素。 实例: for04.go package main import "fmt" func

指针学习四——指针、数组、地址

佐手、 提交于 2020-01-19 04:39:46
指针、数组、地址 指针是以地址作为值的变量,数组名的值是一个特殊的固定地址,看作是指针常量。 int a[100] , *p; 系统把编号为3000,30002...的内存字节作为数组元素a[0],a[1]...的地址。 基地址:内存位置3000是数组a的基地址,即a[0]的地址。 地址常量:数组名a是一个地址常量。 p=a; p=&a[0]; 语句等价,都把3000这个地址值赋给了指针p。 p=a+1; p=&a[1]; 同样,也是等价的,都把3002这个地址值赋给了指针p。 指针 内存地址 内存单元 数组元素 p 3000 a[0] p+1 3002 a[1] p+2 3004 a[2] 数组元素求和: 法一: sum=0; for(p=a;p<=&[99];p++) sum+=*p; *(a+i)与a[i]等价——地址+1为下一个地址,实际增加的不为一。 法二: sum=0; for(p=a;p<=&[99];p++) sum+=*(a+1); 法三: p=a; sum=0; for(i=0;i<100;++i) sum+=p[i]; 1.数组a是指针常量,不是变量。a++是非法的。 2.变量p是指向某个指定类型的指针,p+1代表访问的是下一个变量的内存地址。p+i是有意义的。 3.若p和q都是指向数组的指针,p-q产生一个int型的值,表示之间的数组元素的个数。 4

自用笔记12——指针/数组初始化

ⅰ亾dé卋堺 提交于 2020-01-19 01:36:03
int maxNumberOfBalloons ( char * text ) { int i = 0 , j = 0 , t = 0 , len = 0 , num = 0 ; int * count = malloc ( sizeof ( int ) * 5 ) ; count [ 0 ] = 0 , count [ 1 ] = 0 , count [ 2 ] = 0 , count [ 3 ] = 0 , count [ 4 ] = 0 ; len = strlen ( text ) ; for ( i = 0 ; i < len ; i ++ ) { if ( text [ i ] == 'b' ) count [ 0 ] ++ ; else if ( text [ i ] == 'a' ) count [ 1 ] ++ ; else if ( text [ i ] == 'n' ) count [ 2 ] ++ ; else if ( text [ i ] == 'l' ) count [ 3 ] ++ ; else if ( text [ i ] == 'o' ) count [ 4 ] ++ ; } if ( count [ 3 ] > count [ 4 ] ) j = ( int ) count [ 4 ] / 2 ; else j = ( int ) count

golang之不安全编程

无人久伴 提交于 2020-01-19 00:38:16
楔子 不安全编程?用golang以来也没发现有啥不安全的啊,而且golang有垃圾回收,也不需要我们来管理内存。当听到不安全编程这几个字,唯一能想到的也就是指针了,只有指针才可能导致不安全问题。我们知道golang中是有指针的,但是golang的指针并不能像C语言中的指针一样,可以进行运算,所以golang中的指针既提供了指针的便利性,又保证了安全。但是在golang中,可以通过一个叫做 unsafe 的包让指针突破限制,从而进行运算,一旦用不好会导致很严重的问题,但是用好了在某些场景下能够带来很大的便利,所以我们说这是不安全编程。但即便如此,我们还是可以使用的,而且golang的内部也在大量的使用unsafe这个包。 golang中的指针 尽管golang的指针没有C的指针那么强大,但是能够获取一个变量的地址,并且能通过地址来改变存储的值,我个人认为已经足够了。 package main import "fmt" func pass_by_value(num int){ num = 3 } func pass_by_pointer(num *int){ *num = 3 num = nil } func main() { num := 1 pass_by_value(num) fmt.Println("传递值:", num) //传递值: 1 pass_by_pointer(

C语言函数返回指针方法

那年仲夏 提交于 2020-01-19 00:10:27
什么是指针? 指针 是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。 指针变量声明 type *var-name; type 是指针的基类型,它必须是一个有效的 C 数据类型, var-name 是指针变量的名称。用来声明指针的星号 * 与乘法中使用的星号是相同的。 空指针 赋为 NULL 值的指针被称为 空 指针,NULL 指针是一个定义在标准库中的值为零的常量。 数组指针: 它是一个指针,它指向一个数组。指向数组的指针,本质是指针。 int (*p)[3] 因为()优先级高,首先说明p是一个指针,指向一个int型的一维数组, 数组有3个元素,每个元素是一个int型整数 简单来说,就是int (*p)[3]是指一个指向数组的指针,它其实还是一个指针,只不过是指向数组而已 指针数组: 它是一个数组,数组的元素都是指针。存放指针的数组,本质是数组。 int *p[3] [ ] 优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,指针数组本身就是个数组,只不过这个数组里存放的不是int 不是char,而是一个指针类型( int*,char* ),也就是就是地址 。 函数返回指针 C语言允许函数的返回值是一个 指针 (地址),我们将这样的函数称为指针函数。 用指针作为函数返回值时需要注意的一点是,函数运行结束后会销毁在它内部定义的所有局部数据,包括局部变量